首页 > 解决方案 > 连接主动拒绝

问题描述

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

无法建立连接,因为目标机器主动拒绝 -my IP address:port-

例外。

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

客户端和服务器中的端口确实匹配,所以这不是问题。

另一个帖子建议运行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 地址,我检查了连接是否建立,它是。应该是路由器的东西。

标签: c#socketsnetworkingconnection

解决方案


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


推荐阅读