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
今天的文章java udp简单总结分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30519.html