当前位置: 首页 > 知识库问答 >
问题:

从两个不同的IP连接到服务器不起作用(聊天应用程序)

秦光启
2023-03-14

我构建了一个客户端/服务器聊天应用程序,其中服务器正在侦听IP号码127.0.0.1和端口1212,客户端应该连接到该IP

问题-按以下顺序:

>

  • 我在计算机上运行服务器,正在侦听 (127.0.0.1

    我还在我的计算机上运行一个客户端(与#1相同的计算机),它成功地连接到服务器(127.0.0.1

    我正在从不同的IP运行另一个客户端,但在尝试连接到服务器时(127.0.0.1

    我不明白为什么…这是代码:

    服务器端:

    public partial class ServerForm : Form
    {
        private TcpListener m_tcpServer;
        private TcpClient m_tcpClient; 
        private Thread th;
        private ServerNotifier m_chatDialog;
        private List<ServerNotifier> m_formArray = new List<ServerNotifier>();
        private ArrayList m_threadArray = new ArrayList();
        public delegate void ChangedEventHandler(object sender, EventArgs e);
        public event ChangedEventHandler m_Changed;
        public delegate void SetListBoxItem(String str, String type); 
    
    
        // some code 
    
       public void StartListen() 
        {             
            IPAddress localAddr = IPAddress.Parse("127.0.0.1");
            m_tcpServer = new TcpListener(localAddr, Int32.Parse(tbPortNumber.Text));
            m_tcpServer.Start();
    
            // Keep on accepting Client Connection
            while (true)
            {               
                // New Client connected, call Event to handle it.
                Thread t = new Thread(new ParameterizedThreadStart(NewClient));
                m_tcpClient = m_tcpServer.AcceptTcpClient();
                t.Start(m_tcpClient);                 
            }
        }
    
    
    
    
    }
    

    服务器的消息......

    客户端 :

    public partial class ClientForm : Form
    {
    
        // to know when a button was clicked
        private bool m_connectionEstablished = false;
        private bool m_enterKeyPressed = false;
        private bool m_notRunning = false;        // flip this when the server is not running
        private NetworkStream m_ns = null;
        private StateObject m_state = null;
        private TcpClient m_clientTcpConnection = null;
    
        // ip and m_username entered by the client
        private String m_ipNumberString = String.Empty;
        private String m_username = String.Empty;
        private int m_port = 0;
    
        public bool StartTheClient(int m_port)
        {
            byte[] data = new byte[1024];
            string inputFromClient = "";            
            string portString = "";
    
            try
            {
                // "127.0.0.1"
                this.m_clientTcpConnection = new TcpClient(this.m_ipNumberString , this.m_port);
            }
    
            catch (Exception e)
            {
                // this.rtbClientChat.SelectionColor = Color.LimeGreen;
                this.m_notRunning = true;  // m_clientTcpConnection is not running
                MessageBox.Show("The server is currently not running , try again later!");
                // connection failed
                return false;  
            }
    
            this.rtbClientChat.SelectedText = "Connected to the Server...";
            String local_IP = ((IPEndPoint)m_clientTcpConnection.Client.LocalEndPoint).Address.ToString();
            String local_Port = ((IPEndPoint)m_clientTcpConnection.Client.LocalEndPoint).Port.ToString();
            this.rtbClientChat.SelectedText = "\nConnected on IP address " + local_IP + " and Port " + local_Port;
            this.rtbClientChat.SelectedText = "\nEnter a message to send to the Server";
    
    
            this.m_ns  =  m_clientTcpConnection.GetStream();
            this.m_state = new StateObject();
            this.m_state.workSocket = m_clientTcpConnection.Client;
            this.m_clientTcpConnection.Client.BeginReceive(m_state.buffer, 0, StateObject.BufferSize, 0,
                        new AsyncCallback(OnReceive), m_state);
            // connection established successfully
            this.m_connectionEstablished = true;
            return true;
    
        }
    
    
    
    
    
       /// <summary>
        /// connet/disconnect
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (this.connectionLabel.Checked == true)
            {
                // then the user checked the "connet/disconnect" checkbox 
                // now check if the user also filled the m_port number 
    
                try
                {                    
                    // trying to check if the user entered something is the m_port box
                    // grab port number 
                    m_port = Int32.Parse(this.boxPortNumber.Text);
                    m_ipNumberString = this.ipBoxNumber.Text;
    
                    // grab IP number
                    if (m_ipNumberString == string.Empty)
                    {
                        MessageBox.Show("Please enter a valid IP Number!");
                        this.connectionLabel.Checked = false;
                        return;
                    }
    
                    // grab username
                    this.m_username = this.usernameBox.Text;
                    if (this.m_username == string.Empty)
                    {
                        MessageBox.Show("Please enter a Username!");
                        this.connectionLabel.Checked = false;
                        return;
                    }
                    StartTheClient(m_port);
    
                }
                catch (Exception exp)
                {
                    if (this.m_notRunning == true)    
                    {
                        // then the user tried to initiate connection
                        // while the m_clientTcpConnection is disconnected 
                        this.m_notRunning = false;
                    }
                    else
                    {
                        // the user didn't put anything in the m_port box
                        MessageBox.Show("Please enter a Port number !");
                        this.connectionLabel.Checked = false;
                    }
    
                }
            }
        }
    

    它的winform:

    任何想法为什么会发生这种情况?

    非常感谢!

  • 共有3个答案

    严升
    2023-03-14

    每个设备都有自己的本地主机(127.0.0.1)。

    您不能连接到另一台PClocalhost(127.0.0.1),因此您的服务器应该有IP,例如192.168.0.1,该IP具有可从另一台PC访问的指定端口。

    如果不是,每次它只会尝试连接到自己的本地主机!

    通常,我们只使用localhost在内部测试我们的网络程序。但是,如果您想在本地主机上进行外部测试,则不会成功。

    夏景同
    2023-03-14

    127.0.0.1 在计算机网络中,本地主机是指此计算机。因此,如果您在另一台PC上运行客户端,它将尝试连接到该PC上的服务器,但您的服务器位于另一台PC上。将客户端 IP 设置为您拥有服务器的 IP。

    127.0.0.1

    如果您在服务器上有多个网络接口,您应该像这样启动您的侦听器,有关更多详细信息,请访问以下链接:

    m_tcpServer = new TcpListener(IPAddress.Any, Int32.Parse(tbPortNumber.Text));
    

    TcpListener构造函数

    宰修能
    2023-03-14

    127.0.0.1是本地主机。您应该指定网络中服务器的IP。通过在命令提示符下运行ipconfig,您可以轻松找到服务器的IP。并且侦听器也应该在该IP地址上启动。

     类似资料:
    • 我有两个不同的服务器和,现在我有中的和中的。我试图加入这两个表在MySQL像这样。 但是我犯了一个错误。这在MYSQL中是可能的。

    • 我正在尝试使用Apache Flink流API加入两个流,但没有任何内容加入,并且在阅读文档后我不知道我做错了什么 关键功能是

    • 在我的文件中,我有... 我知道文件正在正确加载,因为服务器在端口8086上运行。 在应用程序中,我有一个 当我调用endpoint时,请求永远不会超时,它只是无限期地挂起。 我错过了什么吗? 注意:我还被告知,Tomcat使用这个字段是以分钟为单位,而不是以毫秒为单位(这在我看来是相当不寻常的选择)。我试着将它设置为< code > server . connection-time out =

    • 我正在使用PHP,MySql和Node.js(socket.io实时聊天)像facebook这样的聊天应用程序。问题是当20个人开始聊天时,我的服务器负载会上升到10-15。我只是在发送方插入消息,并向接收方发送消息ID,接收方从数据库检索消息信息。我有一个Centos服务器有4个物理和4个逻辑核心(共8个核心)和16GB内存。我的网站是在zencart中构建的,当我在静态页面上按f5 1分钟时,

    • 问题内容: 我正在使用PHP和MySQL建立数据库连接,唯一的变化是我试图使用服务器IP地址从本地计算机访问远程服务器。 我得到的错误是。用户拥有所有特权和权利。 问题答案: MySQL的大多数默认安装仅侦听本地计算机。 在服务器上查找设置,并确保它正在侦听目标IP地址。您可能还需要确保 未 打开! 另外一种方法(不太安全!)可以将其设置为侦听所有地址-本地和远程:

    • 问题内容: 我使用nio频道构建了一个简单的聊天应用程序。我对网络和线程非常陌生。该应用程序用于与服务器通信(服务器/客户端聊天应用程序)。 我的问题是服务器不支持多个客户端。我该如何解决这个问题?我的代码中的错误是什么? 问题答案: 初学者Hello NIO Server的 理想之地