学习笔记之JavaSE(51)--网络编程3
2016-12-04 20:00
489 查看
今天学习的内容是UDP传输
无论传输层使用的是UDP协议还是TCP协议,都必须借助socket--套接字的帮助才能进行网络数据传输。UDP传输和TCP传输最大的区别就在于是否需要进行连接,实际上等同于是否需要进行socket连接。
Java也对这两种传输协议所使用的socket及相关内容进行了描述,其中UDP传输主要使用DatagramSocket类和DatagramPacket类,DatagramSocket类表示接收和发送数据报包的套接字,DatagramPacket类表示数据报包。UDP传输的基本模式:
接收端:
使用DatagramSocket(port)创建接收数据报包的套接字,并绑定到指定端口(此端口标识接收端进程)
使用DatagramPacket(buf,length)创建用于接收数据的数据报包
使用DatagranSocket的receive(datagramPacket)方法接收数据报包(阻塞式方法,类似于IO流的读取方法)
发送端:
使用DatagramSocket()创建发送数据报包的套接字,不指定端口(系统会指定任意可用端口来标识发送端进程,并将套接字绑定到此端口)。注意:如果你指定了端口,就不能在一台设备多次运行本进程,因为一个端口不能被多个进程共用!
使用DatagramPacket(buf,length,inetAdress,port)创建用于发送数据的数据报包,将要发送的数据封装到此包中,并指定接收端的IP地址对象与端口号
使用DatagranSocket的send(datagramPacket)方法接收数据报包
注意:套接字没有进行连接,直接传输数据,这就是UDP传输的特点!
示例程序(这里只演示了单向通信):
无论传输层使用的是UDP协议还是TCP协议,都必须借助socket--套接字的帮助才能进行网络数据传输。UDP传输和TCP传输最大的区别就在于是否需要进行连接,实际上等同于是否需要进行socket连接。
Java也对这两种传输协议所使用的socket及相关内容进行了描述,其中UDP传输主要使用DatagramSocket类和DatagramPacket类,DatagramSocket类表示接收和发送数据报包的套接字,DatagramPacket类表示数据报包。UDP传输的基本模式:
接收端:
使用DatagramSocket(port)创建接收数据报包的套接字,并绑定到指定端口(此端口标识接收端进程)
使用DatagramPacket(buf,length)创建用于接收数据的数据报包
使用DatagranSocket的receive(datagramPacket)方法接收数据报包(阻塞式方法,类似于IO流的读取方法)
发送端:
使用DatagramSocket()创建发送数据报包的套接字,不指定端口(系统会指定任意可用端口来标识发送端进程,并将套接字绑定到此端口)。注意:如果你指定了端口,就不能在一台设备多次运行本进程,因为一个端口不能被多个进程共用!
使用DatagramPacket(buf,length,inetAdress,port)创建用于发送数据的数据报包,将要发送的数据封装到此包中,并指定接收端的IP地址对象与端口号
使用DatagranSocket的send(datagramPacket)方法接收数据报包
注意:套接字没有进行连接,直接传输数据,这就是UDP传输的特点!
示例程序(这里只演示了单向通信):
public class UdpReceive { public static void main(String[] args) { System.out.println("UdpReceive start...."); DatagramSocket socket = null; DatagramPacket packet = null; try { socket = new DatagramSocket(5000);// 创建接收数据报包的套接字,并绑定到指定端口(此端口标识接收端进程) while (true) { byte[] buf = new byte[1024];// 接收数据使用的数组 packet = new DatagramPacket(buf, buf.length);// 创建用于接收数据的数据报包 socket.receive(packet);// 接收数据报包--如果没有接收到数据,这个方法是阻塞的 System.out.println("got a packet"); // 通过数据报包的方法,解析其中的数据(比如数据内容,发送端的IP地址和端口号等等) System.out.println("接收的数据:" + new String(buf, 0, packet.getLength())); System.out.println("发送端的IP地址:" + packet.getAddress().getHostAddress());// 10.220.3.122 // 发送端IP地址(动态变化的内网IP) System.out.println("发送端的端口号:" + packet.getPort());// 54302 // 发送端使用的端口号(每次系统指定的端口号都不同!!) System.out.println("receive success"); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (!socket.isClosed()) { socket.close(); System.out.println("socket close success");// 如果发生异常就关闭socket } } } }
public class UdpSend { public static void main(String[] args) { System.out.println("UdpSend start..."); DatagramSocket socket = null; DatagramPacket packet = null; BufferedReader in = null; try { socket = new DatagramSocket();// 创建发送数据报包的套接字,不指定端口(系统会指定任意可用端口来标识发送端进程,并将套接字绑定到此端口) in = new BufferedReader(new InputStreamReader(System.in)); String line = null; while ((line = in.readLine()) != null) { byte[] buf = line.getBytes();// 要发送的数据(用户键盘输入) packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 5000);// 创建用于发送数据的数据报包,将要发送的数据封装到此包中 // 并指定接收端的IP地址对象与端口号 socket.send(packet);// 发送数据报包 System.out.println("send success"); if (line.equals("tuichu")) { break; } } } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (!socket.isClosed()) { socket.close(); System.out.println("socket close success"); } if (in != null) { try { in.close(); System.out.println("in close success"); } catch (IOException e) { System.out.println("关闭资源失败"); } } } } }
相关文章推荐
- 学习笔记之JavaSE(53)--网络编程5
- 学习笔记之JavaSE(50)--网络编程2
- 学习笔记_JavaSE_26_网络编程
- 学习笔记之JavaSE(49)--网络编程1
- JavaSE学习笔记--网络编程之UDP
- JavaSE学习笔记之网络编程
- 【JavaSE学习笔记】网络编程_UDP协议,TCP协议
- 【JavaSE学习笔记】- 网络编程
- JAVASE学习笔记:第十三章 多线程和网络编程
- Java学习笔记之网络编程基础-根据域名自动到DNS上获取IP地址
- Java 网络编程 学习笔记一 基础知识
- 《Web Service 编程 --用C#.NET 开发网络服务》北京希望出版社 我的学习笔记(第一章)(也就是书上抄了一写东西而已)
- 《Web Service 编程 --用C#.NET 开发网络服务》北京希望出版社 我的学习笔记(第二章)(也就是书上抄了一写东西而已)
- 网络编程学习笔记(一)-----socket
- Java学习笔记(七、网络编程基础)
- 学习笔记--网络编程
- ASP.NET 3.5核心编程学习笔记(51):AJAX基础
- Java学习笔记之网络编程基础-通过URLConnection获取HTML页面
- 网络编程学习笔记
- [Linux网络编程学习笔记]索引