我有一个服务器在一个单独的线程上运行,由于某种原因,它只在收到数据包时运行!它为什么这样做?它不应该连续运行吗?
public void run() {
while (running) {
System.out.println(true);
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
this.socket.receive(packet);
} catch (IOException e) {
e.printStackTrace();
}
parsePacket(packet.getData(), packet.getAddress(), packet.getPort());
}
}
我这样开始:
public static void main(String[] args) {
GameServer server = new GameServer();
server.start();
}
该类扩展了Thread。
答案 0 :(得分:6)
socket.receive
是一种阻止方法。所以代码在收到任何数据之前都在等待接收。
答案 1 :(得分:3)
来自here
public void receive(DatagramPacket p)
throws IOException
从此套接字接收数据报包。当这个方法返回时, DatagramPacket的缓冲区充满了收到的数据。该 数据报包还包含发送者的IP地址和端口 发件人的机器上的号码。
此方法将一直阻塞,直到收到数据报。长度字段 数据报包对象包含接收的长度 信息。如果消息长于数据包的长度,则 消息被截断。
它清楚地说方法阻塞并等待数据报。
答案 2 :(得分:3)
您的线程正常运行。方法DatagramSocket.receive(DatagramPacket)
将阻塞,直到收到数据包。
默认行为是无限阻塞,直到收到数据包。您可以使用DatagramSocket.setSoTimeout(int)
指定超时,如果您想定期记录是否收到数据包,或检查您的线程是否仍在运行。