[英]java datagram socket not received (localhost)
这是一个常见问题,但是我似乎无法使它正常工作,这不是由于防火墙引起的,我确保Intellij已获得授权。
UDP SENDER:
public static void main(String[] args){
Timer timer = new Timer();
try {
InetAddress ip = InetAddress.getLocalHost();
int port = 9850;
byte[] buffer = new byte[100];
DatagramPacket packet = new DatagramPacket(buffer, 100, ip, port);
try {
DatagramSocket socket = new DatagramSocket(port, ip);
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("will send !");
try {
socket.send(packet);
}catch (IOException e){
e.printStackTrace();
return;
}
System.out.println("was sent !");
}
},500, 500);
} catch (SocketException e) {
e.printStackTrace();
return;
}
}catch (UnknownHostException e){
e.printStackTrace();
return;
}
}
UDP接收器
public static void main(String[] args) {
int port = 8888;
byte[] buffer = new byte[100];
DatagramPacket packet = new DatagramPacket(buffer, 100);
try {
DatagramSocket socket = new DatagramSocket(port);
while(true) {
try {
System.out.println("ready to receive");
socket.receive(packet);
System.out.println("received a packet");
}catch (IOException e){
e.printStackTrace();
return;
}
}
}catch(SocketException e){
e.printStackTrace();
return;
}
}
数据包已发送,发送方确实显示“将发送/已发送”,但是接收方未收到任何信息,它被阻止,仅显示“准备接收”
ps:没关系,套接字没有关闭...
请仔细查看您正在使用的对DatagramSocket
和DatagramPacket
的各种调用,因为它们会被滥用。
在Sender程序中,您正在“构造一个数据报包,用于将长度为length
的数据包发送到指定主机上的指定端口号。” 然后,您“正在创建绑定到指定本地地址的数据报套接字”。 当您使用相同的端口和InetAddr
,实际上是在将数据包发送到要列出的相同地址。
在Receiver程序中,“构造[]一个数据报套接字,并将其绑定[]到本地主机上的指定端口。” 这次,您将其绑定到与发送端口不同的端口。 (8888与9850将数据包发送到的位置)。
对于发送方,尝试通过调用DatagramSocket()
创建一个绑定到随机端口的套接字。 对于接收方,请更改套接字,以便将其绑定到发送方尝试将其发送到的相同编号的端口(例如9850)
您不需要使用while(true),因为DatagramPacket.receive方法将阻塞,直到接收到数据报为止。
问题的原因可能是一侧与另一侧不同的端口
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.