java udp简单总结

    技术2022-05-18  10

    udp优点与缺点:

     

    udp是无连接协议,也就是说虽然客户端发送了数据,服务端能不能接到数据是不一定的,而且接收到的信息可能是无序的,而且可能是有差错的。数据报通常不能超过64k,很多基于udp以上的协议能够发送的数据会更少。udp实时性比较好。所以多用在视频、音频、如 qq。udp是可以广播发送或是单点发送的。

     

    udp对应java的实现:

     

    java.net 包中存放的主要是网络通信方面的类。udp协议的封装就在其中。为了测试光单向传输设备(该设备 是基于udp协议的)从网络中搜索了有关java udp的一点知识。

     

    java实现udp主要是net包中的几个类。。

     

    DatagramSocket: 数据包接受和发送的类。

     

    DatagramPacket: 数据报类。

     

    InetSocketAddress: 此类实现了IP套接字地址(IP+port)。可以通过这个类去查找主机。

     

    DatagramChannel:针对面向数据报套接字的可选择通道。应该是可以加速传输的。

     

    udp协议简单的通讯过程:

     

    服务端 : 通过创建DatagramSocket实例socket,然后socket不断的监听某个端口12345,查看是否有数据发送过来,如果有就可以接受并处理,这里处理的数据就是DatagramPacket类所创建的实例。

     

    客户端 : 通过封装一个要发送数据的DatagramPacket类,通过InetSocketAddress这个类可以找到接收数据的主机,

    dataPacket = new DatagramPacket(sendDataByte, sendDataByte.length,new InetSocketAddress("127.0.0.1", PORT) ); 通过DatagramSocket类的实例对数据进行发送的操作。

     

    以下是网络上搜索的程序:

     

    服务端:

    package test.server; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPServer {     private static final int PORT = 12345;     private DatagramSocket dataSocket = null;     private DatagramPacket dataPacket = null;         private byte[] receiveByte;     private String receiveStr;             public UDPServer() {         Init();     }     public void Init() {         try {             dataSocket = new DatagramSocket(PORT);             receiveByte = new byte[1024];             dataPacket = new DatagramPacket(receiveByte, receiveByte.length);             System.out.println("server start...");             receiveStr = "";             int i = 0;             // 无数据,则循环             while (i == 0){                 dataSocket.receive(dataPacket);                 i = dataPacket.getLength();                 // 接收数据                 if (i > 0) {                     // 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点                     receiveStr = new String(receiveByte, 0, dataPacket.getLength());                     System.out.println(receiveStr);                     i = 0;// 循环接收                 }             }         } catch (Exception e) {             e.printStackTrace();         }     }     public static void main(String args[]) {         new UDPServer();     }     }

    客户端:

     

    package test.client; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class UDPClient {     private static final int PORT = 12345;     private DatagramSocket dataSocket;     private DatagramPacket dataPacket;     private byte sendDataByte[];     private String sendStr;     public UDPClient() {         Init();     }     public void Init() {         try {             // 指定端口号,避免与其他应用程序发生冲突             dataSocket = new DatagramSocket(8888);             sendDataByte = new byte[1024];             sendStr = "通过UDP发送数据!!!";             sendDataByte = sendStr.getBytes();             dataPacket = new DatagramPacket(sendDataByte, sendDataByte.length,new InetSocketAddress("127.0.0.1", PORT ));             dataSocket.send(dataPacket);         } catch (SocketException se) {             se.printStackTrace();         } catch (IOException ie) {             ie.printStackTrace();         }     }     public static void main(String args[]) {         new UDPClient();     } }

     

    ==================================================

     

    在测试光单向设备时,需要绑定ip和mac,这样才能接受到数据包。

     

    命令:arp -s [ip] [mac]

     

    ===================================================

     

    一个有关java socket 的简单教程:

     

    http://wenku.baidu.com/view/d540613231126edb6f1a104d.html

     


    最新回复(0)