Java 多播聊天,获取发件人';主机/侦听器中的登录名/pc名';s图形用户界面

Java 多播聊天,获取发件人';主机/侦听器中的登录名/pc名';s图形用户界面,java,network-programming,multicast,inetaddress,multicastsocket,Java,Network Programming,Multicast,Inetaddress,Multicastsocket,伙计们,我能够在主机/侦听器系统中获取发送者的IP地址,如何获取发送者的名称,我认为应该是“packet.getHostName(stringip address)”,其中packet是侦听器从发送者接收的数据包的引用。我能够通过“packet.getAddress()”获取发送者的IP 代码如下: al=new ArrayList(); al1=new ArrayList(); try{ InetAddress nn = InetAddress.getByName

伙计们,我能够在主机/侦听器系统中获取发送者的IP地址,如何获取发送者的名称,我认为应该是“packet.getHostName(stringip address)”,其中packet是侦听器从发送者接收的数据包的引用。我能够通过“packet.getAddress()”获取发送者的IP

代码如下:

al=new ArrayList();

al1=new ArrayList();

try{

            InetAddress nn = InetAddress.getByName("ALL-SYSTEMS.MCAST.NET");
            int pn = Integer.parseInt( "4000" );
            MulticastSocket socket = new MulticastSocket(pn);

            DatagramPacket packet = new DatagramPacket(new byte[128], 128);
            socket.joinGroup(nn); 
            System.out.println( "waiting for a packet from "+nn+"...");
            socket.receive(packet);

            GUI.setTextArea(new String(packet.getData()));

            if(!al.contains(packet.getAddress()))
                    {
                al.add(packet.getAddress());
                al1.add(packet.getAllByName(new String(packet.getAddress)));
                    }
                    else if("EXIT".equals(new String(packet.getData())))
                    {
                al.remove(packet.getAddress());
                al1.remove(packet.getAllByName(new String(packet.getAddress)));
                    }               

            GUI.clearLoginArea();

            //for(int j=0;j<al1.size();j++){
                for(int i=0;i<al.size();i++){

                    GUI.setLoginArea(al.get(i)+"");
                }
            //  GUI.setLoginArea(al1.get(j)+"");
                    //}
            socket.leaveGroup(nn);
            socket.close();
        } 
        catch (IOException e) {

System.err.println(e.getMessage());
        }
al=newarraylist();
al1=新的ArrayList();
试一试{
InetAddress nn=InetAddress.getByName(“ALL-SYSTEMS.MCAST.NET”);
int pn=Integer.parseInt(“4000”);
多播套接字=新的多播套接字(pn);
DatagramPacket数据包=新的DatagramPacket(新字节[128],128);
插座组(nn);
System.out.println(“等待来自“+nn+”的数据包”);
套接字接收(数据包);
setTextArea(新字符串(packet.getData());
如果(!al.contains(packet.getAddress()))
{
al.add(packet.getAddress());
添加(packet.getAllByName(新字符串(packet.getAddress));
}
else if(“EXIT”.equals(新字符串(packet.getData()))
{
al.remove(packet.getAddress());
al1.remove(packet.getAllByName(新字符串(packet.getAddress));
}               
clearLoginArea();

//为了(int j=0;jI不明白你在问什么。套接字没有名称。它们有一个IP地址。如果你想让客户端有名称,你应该将其构建到你的网络协议中。嘿,威廉,我已经解决了,谢谢,你是对的。套接字没有名称,它们有IP我想在我的文本中显示发送者的名称。在发送的消息的起始处由发送方发送。我通过在发送方发送的数据包中添加发送方名称字符串来解决此问题。字符串sendPckt=senderName+“:”+chatTextField.getText();您应该在协议中使用一些行业标准。如果设置为基于字符串的协议,我建议使用XML和JSON。否则,请使用Protobuf。