我正在尝试使用java UDP创建客户端服务器应用程序。当服务器从客户端接收消息时,它应解码IP地址和端口号,以便它可以发回数据。问题是当IP地址被解码时,数据包前面有一个/,所以它不能返回消息。该计划的输出如下
等待数据 收到:消息 /178.179.35.1 56798
如何从数据包解码的IP地址的开头删除/?谢谢!
import java.io.*;
import java.net.*;
class UDPServer {
public static void main(String args[]) throws Exception {
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true) {
System.out.println("waiting for data");
DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String( receivePacket.getData());
System.out.println("RECEIVED: " + sentence);
InetAddress IPAddress = receivePacket.getAddress();
System.out.println(IPAddress);
SocketAddress newtry = receivePacket.getSocketAddress();
int port = receivePacket.getPort();
System.out.println(port);
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, newtry);
serverSocket.send(sendPacket);
}
}
}
答案 0 :(得分:1)
使用InetAddress.getHostAddress()获取IP的文本表示。
但是,查看代码,可以粘贴您收到的错误。你应该只是使用InetAddress对象,所以可能会发生其他事情。
答案 1 :(得分:1)
您无需执行任何操作。 DatagramPacket中已经有源IP地址和端口。只需更改数据并发送相同的DatagramPacket。实际上你的代码应该按原样运行 - 如果它失败的原因不是/,那只是显示的内容。
答案 2 :(得分:0)
我用过这个程序。当我的IP地址是动态的时候,我无法获得IP地址。然后我升级了我的系统IP并为此目的采用了静态IP。