我刚刚用 Java 设计了一个应用程序来启用使用一台服务器的多个客户端之间的聊天。我使用了 UDP 套接字和多线程。我对此有一些疑问:
客户端代码:
private void sendMessage(String s) throws Exception
{
byte b[] = s.getBytes();
InetAddress address = InetAddress.getLocalHost();
DatagramPacket packet = new DatagramPacket(b, b.length, address, PORT);
socket.send(packet);
}
根据这里的回答:(我希望我没有误解它) getLocalHost() 方法应该返回本地主机环回地址。但是它返回 192.xxx.xx.xx 因为我已连接到网络。我对么 ?
我处理发送数据包的服务器端代码是:
byte[] b = new byte[1024];
while (true)
{
try
{
Arrays.fill(b, (byte)0);
DatagramPacket packet = new DatagramPacket(b, b.length);
socket.receive(packet);
String content = new String(b, 0 , b.length);
InetAddress clientAddress = packet.getAddress();
int clientPort = packet.getPort();
String id = clientAddress.toString() + ":" + clientPort;
当我打印 id 时,它给了我 : /192.168.56.1:64372 : GREETINGS
。但是端口应该是我从客户端发送数据包的端口,对吗?如果没有,我做错了什么?最后,在发送了一些数据包之后,我得到了一个异常:java.lang.StringIndexOutOfBoundsException: String index out of range: 1046
是因为 1024 大小的字节数组吗?提前致谢 :]