UDP- /*
- UDP:User Datagram protocol 用户数据报协议
- 特点:将数据和源和目的封装成数据包,不需要建立连接
- 每个数据的大小限制在64k
- 不需要建立连接,速度快
- 是不可靠传输协议
- Socket:
- Socket就是为网络服务提供的一种机制。通信的两端都有Socket.
- 网络通信其实就是两个Socket建的通信,数据在两个Socket间通过IO传输
- UDP传输:
- DatagramSocket(用来发送和接收数据包的套接字)
- DatagramPacket(数据报包)
-
- 流程:
- 1 建立udp的socket服务
- 2 将发送数据封装至DatagramPacket
- 3 通过udp的Socket服务将包发送出去
- 4 关闭服务
- */
- /*
- DatagramSocket:
- 构造方法:
- DatagramSocket(int port); 绑定本地端口
- DatagramSocket(int port,InetAddress addr); 绑定本地端口 和 本地ip 地址
- DatagramSocket(SocketAddress addr); 绑定本地SocketAddress地址(ip地址和端口)
- InetSocketAddress(InetAddress addr, int port);根据 IP 地址和端口号创建套接字地址
- 方法:
- bind(SocketAddress addr); //绑定地址和端口
- close();
- connect(InetAddress addr,int port);
- connect(SocketAddress addr);
- disconnect(); //断开连接
- boolean isBound(); 是否绑定
- boolean isClose();
- boolean isConnected();
- receive(DatagramPacket p); 从此套接字接收数据包
- send(DatagramPacket p); 从此套接字发送数据包
- DatagramPacket
- 构造函数:
- DatagramPacket(byte[] buf, int length)
- 构造 DatagramPacket,用来接收长度为 length 的数据包
- DatagramPacket(byte[] buf,int offset,int len,InetAddress addr,int port);
- 构造数据包,长度为len,目的主机时 addr ,端口号是 port
- DatagramPacket(byte[] buf,int offset,int len,SocketAddress saddr);
- 构造数据包,长度为len,目的主机时 saddr
-
- 方法:
- InetAddress getAddress();
- byte[] getData(); 返回数据包内的数据
- void setData(byte[] buf); 设置数据包的数据信息
-
- int getPort(); 返回远程主机的端口号
- setAddress();
- setPort();
- setSocketAddress();
- */
- import java.net.*;
- class UdpSendDemo
- {
- public static void main(String[] args) throws Exception
- {
- //1 建立DatagramSocket,并指定端口
- DatagramSocket dss = new DatagramSocket(9999);
- //2 建立数据包,并将发送数据装包
- String msg = "我是发送包,叮叮叮。。。";
- byte[] buf = msg.getBytes();
- DatagramPacket dp =
- new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.31.248"),10000);
- //3 发送数据包
- // dss.send(dp);
- // buf = ("发送数据的长度:"+buf.length).getBytes();
- // dp.setData(buf,0,buf.length);
- dss.send(dp);
- //4 关闭服务
- dss.close();
- System.out.println("Hello World!");
- }
- }
- class UdpReceiveDemo
- {
- public static void main(String[] args) throws Exception
- {
- DatagramSocket ds = new DatagramSocket(10000);
- byte[] buf = new byte[1024];
-
- DatagramPacket dp = new DatagramPacket(buf,buf.length);
- ds.receive(dp);//阻塞式
- String ip = dp.getAddress().getHostAddress(); //获取发送包的主机的地址
- String name = dp.getAddress().getHostName();//获取远端主机名
- int port = dp.getPort();
- int len = dp.getLength();//获取接受到的数据的长度
- byte[] buf1 = dp.getData();//获取信息
- System.out.println("自动创建的缓冲数组的长度:"+buf1.length);
- String msg = new String(buf,0,dp.getLength());
- System.out.println("远端主机:"+name+": "+ip+" :"+msg+" port: "+port+" length: "+len);
- ds.close();
- }
- }
复制代码
|
|