java中UDP通信,两边都怎么也接收不了,都是阻塞状态。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中UDP通信,两边都怎么也接收不了,都是阻塞状态。相关的知识,希望对你有一定的参考价值。

一边是:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpServer

public static void main(String[] args) throws Exception
DatagramSocket socket = new DatagramSocket();

String str = "hello world";
DatagramPacket packet = new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName("localhost"),

30000);
socket.send(packet);

byte[] buffer = new byte[1000];

DatagramPacket packet2 = new DatagramPacket(buffer, 100);

socket.receive(packet2);

System.out.println(new String(buffer, 0, packet2.getLength()));
socket.close();




另一边是:
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpServer2

public static void main(String[] args) throws Exception
//创建数据报套接字并将其绑定到本地主机上的指定端口30000
DatagramSocket socket=new DatagramSocket(30000);
byte[] buffer=new byte[1024];
DatagramPacket packet=new DatagramPacket(buffer,1000);
socket.receive(packet);
System.out.println(new String(buffer,0,packet.getLength()));

String str="welcome";
//构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。length 参数必须小于等于 buffer.length。
DatagramPacket packet2=new DatagramPacket(str.getBytes(),str.length(),packet.getAddress(),packet.getPort());
socket.send(packet2);
socket.close();



参考技术A 你要先运行UdpServer2,因为它是服务器本回答被提问者采纳 参考技术B 1:确保两台机器可通信
2:确保30000端口可被访问

我用udp发送一个16进制包,接收端怎么解析。

我用tcp/udp发送了一个16进制数据,接收端怎么接收才不会乱码。。(正常显示数据)

参考技术A 数据传输都是以字节流方式
发送端包装成 byte[]数组,发送就可以了
和什么进制数据没有关系,进制只是数据写的方式。
不同的进制写法只是程序员看的,在内存里都是一样的
参考技术B 接受和发送都是针对byte而言的你要是发送16进制 就先把16进制数转换成byte数组同理接收时候先接收byte数组 在转成16进制就是了本回答被提问者采纳

以上是关于java中UDP通信,两边都怎么也接收不了,都是阻塞状态。的主要内容,如果未能解决你的问题,请参考以下文章

狂神说Java笔记--网络编程部分笔记

我用udp发送一个16进制包,接收端怎么解析。

Android UDP 通信。无法从设备接收数据

UDP协议

UDP协议详细讲解

UDP与TCP协议