我刚刚设计了一个Java应用程序,可以让多个客户端通过一个服务器进行聊天。我使用了UDP套接字和多线程。我有一些关于这方面的问题:
客户端代码:
根据这里的回答(希望我没有误解),getLocalHost()方法应该返回本地回环地址。但是因为我连接到了一个网络,它却返回了192.xxx.xx.xx。我的理解正确吗?
我处理发送数据包的服务器端代码如下:
当我打印ID时,它会给我:
客户端代码:
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 : 问候
。但端口应该是我从客户端发送数据包的那个端口,对吗?如果不是,我做错了什么?最后,在发送一些数据包后,我会得到一个异常:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:1046
。这是因为1024字节大小的字节数组吗?提前感谢:]
getLocalHost()
返回的地址相同。 - Fildor