连接被主动拒绝

时间:2018-06-10 01:30:25

标签: c# sockets networking connection

我正在编写C#套接字网络应用程序。 我通过连接到" 127.0.0.1" 上的服务器进行测试时工作得很好,但当我到达我决定要从其他机器测试时并将连接的地址切换到我的实际IP地址,我开始得到

  

无法建立连接,因为目标计算机是主动的   拒绝了 - 我的IP地址:端口 -

异常。

我在其他帖子中寻找解决方案,我发现其中一个是禁用我的防火墙,但这并没有解决问题。

端口在客户端和服务器中匹配,因此不是问题。

另一篇帖子建议运行netstat -anb并查看服务器是否正在侦听指定端口,令我惊讶的是,应用程序甚至没有显示在结果中。

这是建立连接的代码:

我的类中处理客户端连接的连接方法:

public bool Connect()
            {
            if (!connected)
                {
                try
                    {
                    sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    sock.Connect(new IPEndPoint(IPAddress.Parse(address), port));
                    connected = true;
                    return true;
                    }
                catch(Exception e)
                    {
                    Console.WriteLine(e.Message);
                    connected = false;
                    return false;
                    }
                }
            return false;
            }

服务器端我使用这个简单的监听器:

public class Listener
        {
        Socket sock;
        bool listening = false;
        int port;

        public delegate void socketAcceptedHandler(Socket s);
        public event socketAcceptedHandler socketAccepted;

        public Listener(int port)
            {
            this.port = port;
            }

        public void start()
            {
            if (listening)
                {
                return;
                }

            sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            sock.Bind(new IPEndPoint(0, port));
            sock.Listen(0);
            sock.BeginAccept(callback, null);

            listening = true;
            }

        public void stop()
            {
            if (!listening)
                {
                return;
                }

            if (sock != null)
                {
                sock.Close();
                sock.Dispose();
                }

            listening = false;
            }

        public void callback(IAsyncResult result)
            {
            try
                {
                Socket s = sock.EndAccept(result);

                if (socketAccepted != null)
                    {
                    socketAccepted(s);
                    }

                sock.BeginAccept(callback, null);
                }
            catch (Exception e)
                {
                Console.WriteLine("Something went wrong:\n{0}", e.Message);
                }
            }
        }

更新: 如果我使用本地IP地址,我检查了连接是否已建立。必须是路由器。

2 个答案:

答案 0 :(得分:0)

防火墙可能阻塞端口,某些其他程序可能正在侦听端口或端口受到限制。您可以在命令提示符下运行“netstat -aon”,以查看哪个进程正在侦听您要访问的端口。

答案 1 :(得分:0)

根据编辑:因为它适用于我的本地地址,我认为它必须是路由器的东西,我很可能只需要转发端口。如果这不是我要回复的答案,但是现在我要感谢所有评论的人,并将其视为解决方案。