`
xiao1zhao2
  • 浏览: 40413 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java网络编程基础:UDP

阅读更多
目录
1、网络知识基础
2、UDP传输
3、利用UDP模仿聊天室

 

1、网络知识基础

1.1网络通讯要素

IP地址 标识设备,本地默认IP:127.0.0.1,主机名:localhost
端口号 标识进程,有效端口号:0-65535,其中0-1024系统保留
传输协议 通讯规则,TCP,UDP等

1.2InetAddress类
  表示互联网协议 (IP) 地址,常用方法:

getLocalHost() 返回本地主机
getByName(String str) 根据给定主机名(IP地址字符串)获得IP地址
getHostName()  返回此IP地址的主机名
getHostAddress() 返回IP地址字符串

1.3域名解析
  DNS,DomainNameSystem域名系统,将我们访问网站时输入的域名(例如www.oracle.com)解析为ip.电脑里本地的DNS解析文件位于C:\Windows\System32\drivers\etc目录下的HOSTS文件,可以对其修改,添加自定义域名解析表,实现屏蔽广告页面等功能(将广告页面的网址对应127.0.0.1)

1.4URL类

URL是统一资源定位符,示例代码

				public class URLDemo {

					public static void main(String[] args) throws IOException {

						URL url = new URL("http://192.168.1.100:8080/myweb/index.html?name=zhangsan");

						System.out.println(url.getProtocol());
						System.out.println(url.getHost());
						System.out.println(url.getPort());
						System.out.println(url.getFile());
						System.out.println(url.getPath());
						System.out.println(url.getQuery());

					}
				} 

1.5Socket简介

  网络通信的端点,通信的两端都有Socket,网络通信其实就是Socket之间的通信,数据在两个Socket间通过IO传输

 

2、UDP传输

2.1UDP特点

    User Datagram Protocol 用户数据报协议
    无连接,不可靠的协议
    将数据封装成数据包,每个大小限制在64K内,速度快

2.2相关类
    DatagramSocket
      Socket服务类,主要方法:send(),receive()等,receive方法为阻塞方法
    DatagramPacket
      数据报包类,用于封装和解析数据
  注意
    发送端和接收端是两个独立运行的程序,接收端必须明确端口号

2.3例代码

				// 发送端
				public class Sender {

					public static void main(String[] args) throws IOException {

						// 1:使用DatagramSocket对象,简历UDP的Socket服务
						DatagramSocket socket = new DatagramSocket();

						// 2:使用DatagramPacket对象,将要发送的数据封装在数据报包中
						String str = "Hello World";
						byte[] buf = str.getBytes();
						DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 10000);

						// 3:通过Socket服务,调用send()方法将数据报包发送出去
						socket.send(packet);

						// 4:关闭Socket服务
						socket.close();
					}
				}				
		
				// 接收端
				public class Receiver {

					public static void main(String[] args) throws IOException {

						// 1:使用DatagramSocket对象,简历UDP的Socket服务
						DatagramSocket socket = new DatagramSocket(10000);

						// 2:使用DatagramPacket对象,用于接收数据报包数据
						byte[] buf = new byte[1024];
						DatagramPacket packet = new DatagramPacket(buf, buf.length);

						// 3:通过Socket的receive()方法将接受的数据存储在数据报包中
						socket.receive(packet);

						// 4:通过数据报包对象的方法解析数据包中的数据(地址,端口,数据内容等)
						String ip = packet.getAddress().getHostAddress();
						int port = packet.getPort();
						String str = new String(packet.getData(), 0, packet.getLength());
						System.out.println(ip + ":" + port + ":" + str);

						// 5:关闭Socket服务
						socket.close();
					}
				}

 

 3、利用UDP模仿聊天室

  将上述代码进行改进,增加多线程和发广播的功能,可以实现简易的聊天室:

				//发送端任务类
				public class Send implements Runnable {

					private DatagramSocket socket;

					public Send(DatagramSocket socket) {
						this.socket = socket;
					}

					@Override
					public void run() {
						BufferedReader reader = new BufferedReader(new InputStreamReader(
								System.in));
						String words = null;
						try {
							while ((words = reader.readLine()) != null) {
								byte[] buf = words.getBytes();
								// 255表示发广播
								DatagramPacket packet = new DatagramPacket(buf, buf.length,
										InetAddress.getByName("192.168.1.255"), 10000);
								socket.send(packet);
								// 模拟结束
								if ("886".equals(words)) {
									break;
								}
							}
							socket.close();
						} catch (IOException e) {
							e.printStackTrace();
						}

					}

				}

				//接收端任务类
				public class Receive implements Runnable {

					private DatagramSocket socket;

					public Receive(DatagramSocket socket) {
						this.socket = socket;
					}

					@Override
					public void run() {
						try {
							while (true) {
								byte[] buf = new byte[1024];
								DatagramPacket packet = new DatagramPacket(buf, buf.length);
								socket.receive(packet);

								String ip = packet.getAddress().getHostAddress();
								String message = new String(packet.getData(), 0,
										packet.getLength());
								System.out.println(ip + ":" + message);

							}
						} catch (IOException e) {
							e.printStackTrace();
						}
					}

				}

				//开启聊天
				public class Chart {

					public static void main(String[] args) throws SocketException {
						DatagramSocket send = new DatagramSocket();
						DatagramSocket receive = new DatagramSocket(10000);
						new Thread(new Send(send)).start();
						new Thread(new Receive(receive)).start();
					}

				}

 

1
4
分享到:
评论

相关推荐

    《Java网络编程实例:Java网络编程实例》

    5. **输入/输出流**:网络编程涉及数据的发送和接收,因此理解和掌握I/O流是必需的。例如,InputStream和OutputStream用于处理字节流,而Reader和Writer则用于处理字符流。 6. **URL和URLConnection**:Java的URL类...

    Java网络编程案例教程习题参考答案 .pdf

    Java_network_programming是Java编程语言中一个基础组件,用于实现网络通信。以下是Java网络编程案例教程习题参考答案中涉及到的知识点: 1. Socket编程:Socket是Java网络编程中最基本的组件,用于实现网络通信。...

    JAVA网络编程基础案例

    在JAVA网络编程基础案例中,我们探讨的是如何利用Java语言进行网络通信,这涉及到一系列的概念和技术。Java网络编程是开发分布式应用的关键部分,它允许程序通过Internet或局域网进行数据传输。 首先,理解网络编程...

    Java网络编程实例:TP312JA S973.rar

    8. **异常处理**:网络编程中常见的异常如`IOException`、`SocketException`等,需要妥善捕获和处理,以确保程序的健壮性。 9. **网络调试工具**:开发者可以利用`jconsole`、`jvisualvm`等工具监控网络活动,排查...

    Java网络编程/Java网络编程实例

    9. **异常处理**:网络编程中常见的异常有IOException、SocketException等,良好的异常处理机制可以确保程序的健壮性。 10. **网络调试工具**:如telnet、curl和Wireshark等,可以帮助开发者测试和调试网络应用。 ...

    java网络编程

    7. **异常处理**:网络编程中,必须妥善处理IOException,确保程序的健壮性。 8. **网络安全**: - **加密与解密**:了解基本的加密算法,如AES和RSA,以及如何在Java中实现。 - **认证与授权**:理解身份验证和...

    编程实现基于UDP的PING (Java)

    下面将详细解释基于UDP的PING实现以及相关的Java编程知识。 首先,UDP是传输层的一种无连接协议,它不提供诸如确认、流量控制或重传等服务,因此相对于TCP,UDP更适合于对实时性要求高但可以容忍数据丢失的应用场景...

    Java网络编程期末考试复习题库+答案

    1. **Java I/O**: Java I/O系统是Java网络编程的基础,包括InputStream、OutputStream、Reader、Writer等基本流,以及FileInputStream、FileOutputStream等文件流。此外,还有BufferedInputStream、BufferedReader等...

    Java网络编程:深入理解TCP,UDP通信机

    Java网络编程是Java开发中的一个重要领域,它涉及到Socket编程、TCP/UDP通信协议等多个方面。通过掌握Java网络编程的基础知识和技能,开发者可以构建出功能强大、性能优异的网络应用程序。随着技术的不断发展,Java...

    Java网络编程(第4版)PDF

    此书全面覆盖了Java网络编程的基础和高级概念,帮助开发者理解如何利用Java语言构建高效、可靠的网络应用程序。 在Java网络编程中,首要涉及的是I/O模型。书中会介绍基础的套接字(Socket)编程,包括TCP和UDP协议...

    Java网络编程

    #### 一、网络编程基础与TCP/IP协议 1. **TCP/IP协议概述** TCP/IP(Transmission Control Protocol/Internet Protocol)是互联网的基础协议之一,用于实现不同网络间的通信。该协议由多个子协议组成,其中最重要...

    Java网络编程第三版.pdf

    1. **Java网络编程基础**:首先,书中会介绍Java中的Socket编程,包括TCP和UDP协议的基础知识,以及如何使用Java的Socket和ServerSocket类创建客户端和服务器端的连接。 2. **I/O与NIO**:Java的I/O流系统是网络...

    java.net.SocketTimeoutException: Receive timed out

    标题中的“java.net.SocketTimeoutException: Receive timed out”是一个Java编程中常见的异常,通常发生在进行网络通信时,接收数据超时。这个异常是由于Socket在等待接收数据时超过了预设的超时时间,没有接收到...

    Java核心编程技术源码

    《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...

    Java教学视频录像(高级篇)之Java网络编程基础.zip

    最后,"Java网络编程基础.txt"很可能是课程的核心内容概述,它可能涵盖了TCP/IP协议栈、套接字编程、多线程处理网络请求、异常处理、网络安全以及Java网络库如NIO(New IO)和NIO.2的知识点。在Java中,Socket类用于...

    java网络编程,UDP,发送16进制报文。

    总结,本教程介绍了如何使用Java进行UDP网络编程,特别是如何发送16进制格式的报文。通过结合Base64编码,可以实现将大型数据(如图片)分块发送。实践中,需要考虑数据完整性和网络环境的可靠性,以及服务端的数据...

    Java网络编程实例(随书源代码)

    Java网络编程是开发分布式应用程序的关键技术,它允许程序通过网络发送和接收数据。《Java网络编程实例》这本书的源代码提供了丰富的示例,帮助读者深入理解这一领域。本压缩包包含的源代码覆盖了Java网络编程的各种...

Global site tag (gtag.js) - Google Analytics