Java UDP服务器无法解码正确的IP地址

时间:2011-03-03 20:28:34

标签: java udp

我正在尝试使用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);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

使用InetAddress.getHostAddress()获取IP的文本表示。

但是,查看代码,可以粘贴您收到的错误。你应该只是使用InetAddress对象,所以可能会发生其他事情。

答案 1 :(得分:1)

您无需执行任何操作。 DatagramPacket中已经有源IP地址和端口。只需更改数据并发送相同的DatagramPacket。实际上你的代码应该按原样运行 - 如果它失败的原因不是/,那只是显示的内容。

答案 2 :(得分:0)

我用过这个程序。当我的IP地址是动态的时候,我无法获得IP地址。然后我升级了我的系统IP并为此目的采用了静态IP。