这是我的密码:
public class UDPServer implements Runnable{
DatagramSocket socket;
Logger logger;
public UDPServer(DatagramSocket socket, Logger logger) {
this.socket=socket;
this.logger=logger;
}
public static void handleEchoClient(DatagramSocket socket, Logger logger) throws IOException {
int totalBytesEchoed=0;
DatagramPacket packet = new DatagramPacket(new byte[32], 32);
socket.receive(packet);
String s=new String(packet.getData()).trim();
totalBytesEchoed=s.length();
logger.info("Client " + socket.getRemoteSocketAddress() +", echoed " + totalBytesEchoed + " bytes.");
socket.send(packet);
}
public void run() {
try {
handleEchoClient(socket, logger);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException{
int servPort = 3444;
DatagramSocket socket = new DatagramSocket(servPort);
DatagramPacket packet = new DatagramPacket(new byte[32], 32);
Executor servis = Executors.newCachedThreadPool();
Logger logger = Logger.getLogger("practical");
servis.execute(new UDPServer(socket, logger));
servis.execute(new UDPServer(socket, logger));
}
}
它只支持一个客户端,但不支持两个客户端。提前谢谢。
忽略这一点:看起来你的帖子大部分都是代码;请添加更多细节。看起来你的帖子大部分是代码;请补充一些细节。
1条答案
按热度按时间drkbr07n1#
您只有一个套接字,并且将每个回复发送到该套接字的远程地址。所以你的代码不可能把回复发送到两个不同的地方。
如果要处理多个客户端,则需要跟踪与之通信的各种远程地址,并向相应客户端的远程地址发送回复。