我正在制作一个简单的 UDP 聊天程序,我希望服务器能够发送到客户端,而无需先从客户端接收数据。正常情况下,服务器在接收到客户端的数据时,会获取到客户端的IP和端口,从而可以与其进行通信。
我的服务器代码:
package com.ageforce;
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class ChatServer {
DatagramSocket server;
byte[] receivedData = new byte[1024];
Scanner scanner = new Scanner(System.in);
byte[] sentData;
DatagramPacket dp2 = new DatagramPacket(receivedData, receivedData.length);
public ChatServer() throws SocketException {
server = new DatagramSocket(7000);
}
public static void main(String[] args) throws SocketException {
ChatServer cs = new ChatServer();
Thread receiveMessage = new Thread(() -> {
while (true) {
try {
cs.server.receive(cs.dp2);
} catch (IOException e) {
e.printStackTrace();
}
String storedData = new String(cs.dp2.getData());
System.out.println(storedData);
}
});
Thread sendMessage = new Thread(() -> {
while (true) {
String sentMessage = cs.scanner.nextLine();
cs.sentData = sentMessage.getBytes();
// This is the area of the code where the server gets IP and port of client from the received data. I'd like this to be changed.
InetAddress getIP = cs.dp2.getAddress();
int port = cs.dp2.getPort();
DatagramPacket dp3 = new DatagramPacket(cs.sentData, cs.sentData.length, getIP, port);
try {
cs.server.send(dp3);
} catch (IOException e) {
e.printStackTrace();
}
}
});
sendMessage.start();
receiveMessage.start();
}
}
是否有可能做到这一点?非常感谢任何答复。
如何在不先从客户端接收数据的情况下获取客户端的端口和地址?
UDP 没有提供这种可能性。它是一种无连接的协议,因此服务器甚至不知道有是一个客户端,直到它从它接收的消息。
可以想象,您可以创建某种初步的应用程序级协议,客户端在向服务器发送任何聊天数据之前向服务器宣布自己,但这种协议本身并不是 UDP 的一部分,如果这是您想要的,那么您应该考虑使用 TCP相反,它确实具有在发送任何数据之前建立连接的内置概念。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句