我正在尝试创建一个接收UDP数据包并使用UDP消息进行响应的服务器。但是,我似乎无法将其绑定到端口。这是我的类的构造函数:
public UDPServer() throws IOException {
myGUI = new ServerGUI();
myClientList = new ArrayList<ClientInfo>();
DatagramChannel channel = DatagramChannel.open();
mySocket = channel.socket();
//mySocket = new DatagramSocket(null);
//mySocket.setReuseAddress(true);
//mySocket.bind(new InetSocketAddress("localhost", Constants.SERVER_PORT_NUM));
myPortNum = mySocket.getPort();
myIP = mySocket.getInetAddress();
System.out.println(myPortNum + " " + myIP.toString());
}
我已尝试过channel方法和注释掉的方法,我甚至使用此方法尝试找到一个开放端口:
private DatagramSocket createNewSocket() throws IOException {
for (int i = Constants.MIN_PORT_NUM; i < Constants.MAX_PORT_NUM; i++){
try {
System.out.println(i);
return new DatagramSocket(i);
} catch (IOException e){
continue; // try next port
}
}
throw new IOException("No free port found");
}
但到目前为止我没有运气。 portNum始终为-1
,IP为null
。有什么想法可以在这里发生吗?
编辑:当我在调试模式下运行以下命令并滚动mySocket以查看它包含的值时,它表示:
bound = true
closed = false
connectedAddress = null
connectedPort = -1
但是当我运行mySocket.getLocalPort()
时,它会返回一个有效的端口号。这是怎么回事?
以下是代码:
public UDPServer() throws IOException {
myGUI = new ServerGUI();
myClientList = new ArrayList<ClientInfo>();
mySocket = new DatagramSocket(Constants.SERVER_PORT_NUM);
mySocket.setReuseAddress(true);
myPortNum = mySocket.getLocalPort();
myIP = mySocket.getInetAddress();
System.out.println(mySocket);
}
答案 0 :(得分:0)
您不需要这样做。只需使用非args构造函数创建它,或指定端口零。系统将为您分配一个免费端口。