首页 > 解决方案 > SocketException试图连接到服务器“连接尝试失败,因为连接方在一段时间后没有正确响应”

问题描述

我有一个服务器,它只是一个侦听我计算机端口的程序。我有一个客户端程序,它连接到这个端口,发送请求并获得响应。为此,我使用System.Net.Socket带有 tcp 协议的类。

问题是当服务器在同一台计算机上时我的客户端可以连接,但是当我将客户端交给其他人时,它不起作用。SocketException : 连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。我不明白,但当我刚刚开始时,我觉得有些东西对我隐藏了......

这是我的代码:

客户:

private void Connect_Click(object sender, EventArgs e)
        {
            try
            {
                sock.Connect(new IPEndPoint(IPAddress.Parse(ip.Text), 1234));
                new Thread(() =>
                {
                    read();
                }).Start();
            }
            catch (Exception ex)
            {
                //Manage exception
            }
        }

private void read()
        {
            while (true)
            {
                try
                {

                    byte[] buffer = new byte[255];
                    int rec = sock.Receive(buffer, 0, buffer.Length, SocketFlags.None);
                    if (rec <= 0)
                        throw new SocketException();

                    Array.Resize(ref buffer, rec);

                    //Displaying received data
                    Invoke((MethodInvoker)delegate
                    {
                        requests.Items.Add(Encoding.Default.GetString(buffer));
                    });
                }
                catch
                {
                    MessageBox.Show("DISCONNECTED");
                    sock.Close();
                    break;
                }
            }

            Application.Exit();
        }

服务器:

private void Listen()
        {
            server.Listen(0);

            new Thread(AcceptOneConnection).Start();
        }

private void AcceptOneConnection()
        {
            if (client != null)
                client.Close();

            client = server.Accept();

            MessageBox.Show("Client accepted");

            while (true)
            {
                string received = ReceiveData();

                if (received == "stop connection")
                    break;

                string[] request = received.Split(' ');

                switch (request[0])
                {
                    case "register":
                        Register(request);
                        break;
                    case "login":
                        Login(request);
                        break;
                    case "disconnect":
                        UsersManager.Disconnect();
                        SendData("Disconnected");
                        break;
                    default:
                        SendData("Unknown request");
                        break;
                }
            }

            client.Close();
        }

private string ReceiveData()
        {
            try
            {
                byte[] buffer = new byte[255];
                int rec = client.Receive(buffer, 0, buffer.Length, 0);

                if (rec <= 0)
                    throw new SocketException();

                Array.Resize(ref buffer, rec);

                return Encoding.ASCII.GetString(buffer);
            }
            catch
            {
                return "";
            }
        }

我应该改变什么以使拥有客户端的人能够连接到服务器?

标签: c#socketstcpserverclient

解决方案


推荐阅读