java套接字UDP双向使用数据报
问题描述:
我是新来的java套接字,我想创建一个简单的UDP传输使用客户端服务器。我现在的问题是服务器正在运行无限循环,而不是将消息发送到客户端。很抱歉,如果我做了一些愚蠢的错误,感谢java套接字UDP双向使用数据报
服务器:
import java.net.*;
import java.util.*;
class EchoServer {
public static void main(String args[]) throws Exception {
DatagramSocket socket = new DatagramSocket(54373);
DatagramPacket packet = new DatagramPacket(new byte[512],512);
String temp = "Hello client";
byte[] buffer = temp.getBytes();
while (true) {
socket.receive(packet);
System.out.println("Received from client");
DatagramPacket packet2 = new DatagramPacket(buffer,buffer.length,InetAddress.getByName("127.0.0.1"),54373);
socket.send(packet2);
}
}
}
客户:
import java.net.*;
import java.util.*;
class EchoClient {
public static void main(String args[]) throws Exception {
DatagramSocket socket = new DatagramSocket();
socket.setSoTimeout(5000);
byte[] buffer = "Hello Server".getBytes();
DatagramPacket packet = new DatagramPacket(buffer,buffer.length,InetAddress.getByName("127.0.0.1"),54373);
socket.send(packet);
DatagramPacket packet2 = new DatagramPacket(new byte[512],512);
socket.receive(packet2);
System.out.println("Received from server");
}
}
然而,我的服务器是能够发送原来的 “包”,而不是packet2
答
您的服务器正在发回自己。在构造答复数据报时,不应使用自己的端口号,而应使用已经在请求数据报中的端口号。和IP地址。实际上,它应该按照原样发送请求数据报,因为它是一个回显服务器:不需要构造另一个。
如果协议改变了想法是使用上的要求setData()
方法把回复到它,再而不是创建一个新的数据报。