java - UDP聊天问题

标签 java networking udp lan datagram

friend 们大家好,我创建了一个 UDP 聊天程序,客户端可以通过该程序通过 LAN 进行通信。

我创建了一个通用程序,即我使用不同的端口号运行相同的代码。和 LAN 上的 IP 地址

我的问题是,下面的代码在本地主机上运行良好,但是当我尝试连接两台机器时,该代码不起作用..没有错误,但两个客户端仍然无法通信

我也关闭了防火墙。但我无法找出为什么我无法在两台机器之间通信

代码如下::

    import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;

class ChatApplDG extends Frame implements ActionListener
{

    TextField tf = new TextField(50);
    Button btn = new Button("Send");
    Button exit = new Button("Exit");
    TextArea ta = new TextArea(50,10);
    int fromPort, toPort;
    String hostName;

    DatagramSocket dgSock;

    public static void main(String args[]) throws Exception
    {
        ChatApplDG ca = new ChatApplDG();
        ca.startClient(args[0],Integer.parseInt(args[1]),Integer.parseInt(args[2]));
    }

    ChatApplDG()
    {
        Panel p = new Panel();
        add(p,BorderLayout.NORTH);
        p.add(tf);
        p.add(btn);
        p.add(exit);
        add(ta,BorderLayout.CENTER);
        btn.addActionListener(this);
        exit.addActionListener(this);
        setSize(500,300);
        show();
        ta.setEditable(false);
    }

    void startClient(String hName,int fPort,int tPort)
    {
        try
        {
            hostName = hName;
            fromPort=fPort;
            toPort=tPort;
            dgSock = new DatagramSocket(fromPort);
            ta.append("Ready To Send ...\n");
            RunningThreadDG rt = new RunningThreadDG(dgSock,ta);
            Thread thread = new Thread(rt);
            thread.start();
        }
        catch(Exception e)
        {
        }
    }


    public void actionPerformed(ActionEvent ae)
    {
        if(ae.getSource()==btn)
        {
            try
            {
                byte buff[] = new byte[500];
                InetAddress remoteHost = InetAddress.getByName(hostName);
                buff=tf.getText().getBytes();
                dgSock.send(new DatagramPacket(buff,buff.length,remoteHost.getLocalHost(),toPort));
                ta.append("Send : " + tf.getText() + "\n");
                tf.setText("");
            }
            catch(Exception e)
            {
            }
        }
        else
        {
            System.exit(0);
        }
    }
}


class RunningThreadDG extends Frame implements Runnable
{
    DatagramSocket dgSock;
    TextArea ta;
    String str;

    RunningThreadDG(DatagramSocket dgs,TextArea t)
    {
        dgSock=dgs;
        ta=t;
    }   

    public void run()
    {
        byte[] buff = new byte[500];
        while(true)
        {
            try
            {
                DatagramPacket dgPack = new DatagramPacket(buff,buff.length);
                dgSock.receive(dgPack);
                ta.append("Received : " + new String(dgPack.getData(),0,dgPack.getLength()) + "\n");
            }
            catch(Exception e)
            {
            }
        }
    }
}

最佳答案

这里有一个问题:

dgSock.send(new DatagramPacket(buff,buff.length,remoteHost.getLocalHost(),toPort));

remoteHost.getLocalHost() 返回本地主机的 InetAddress。尝试仅传递 remoteHost 而不是 remoteHost.getLocalHost():

dgSock.send(new DatagramPacket(buff,buff.length,remoteHost,toPort));

关于java - UDP聊天问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2324624/

相关文章:

sockets - UDP 服务器发现 - 客户端应该发送多播以查找服务器还是服务器应该发送常规信标?

linux - tshark 2.2.6 在某些计算机上不显示 data.text 字段

java - 用opencv java打开视频文件

java - 如何在android中将特定的用户代理与(神奇的)ExoPlayer一起使用?

java - 在 java 中使 String 无效是一种好习惯吗

java - WebCollector 无法解析查询 Java

java - 在多播套接字上接收单播

c++ - 为什么我的网络 TCP/UDP 实现不起作用?

c - 为什么 Sendto() 不在 c 中发送数据包?

linux -/etc/网络/接口(interface) : What's <eth>:<num> mean?