【发布时间】:2016-09-25 21:56:09
【问题描述】:
我正在尝试向一个简单的乒乓球游戏添加多人游戏形式,但是当我尝试启动 DatagramPacket 并尝试读取 IP 和端口时,它显示 ip 是 null 而端口是 -1 .有谁知道它为什么会这样做?我想可能是因为套接字还没有收到数据包,但是当我查看时,我看到socket.recieve(packet) 之后的所有代码都没有运行。
我启动服务器的代码:
public GameServer(PongEngine engine) {
this.engine = engine;
try {
this.socket = new DatagramSocket(4269);
} catch (SocketException e) {
e.printStackTrace();
}
}
public void run() {
while(true) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
System.out.println(packet.getAddress() + ":" + packet.getPort());
try {
socket.receive(packet);
} catch (IOException e) {
e.printStackTrace();
}
String message = new String(packet.getData());
if(message.trim().equalsIgnoreCase("ping")) {
System.out.println("CLIENT[" + packet.getAddress() + ":" + packet.getPort() + "] > " + message);
sendData("pong".getBytes(), packet.getAddress(), packet.getPort());
}
}
}
【问题讨论】:
-
你的第一个想法是正确的。直到调用接收函数后才会填充 IP 和端口值。如果该点之后的代码没有执行,那么要么抛出异常,要么根本没有客户端连接。接收将阻塞,直到收到数据包。
-
据我所知,我正在正确运行客户端和服务器。这是我的客户:pastebin.com/2zMdgNVP。有什么问题吗?
标签: java sockets server udp datagram