代码之家  ›  专栏  ›  技术社区  ›  Zoltán Király

主动拒绝连接

  •  0
  • Zoltán Király  · 技术社区  · 7 年前

    我在写一个C_sockets网络应用程序。 当我在“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 回复  |  直到 7 年前
        1
  •  0
  •   Boxcomeaux    7 年前

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

        2
  •  0
  •   Zoltán Király    7 年前

    根据编辑:由于它与我的本地地址工作,我认为它一定是路由器的事情,很可能我只需要转发端口。如果这不是我要转载的答案,但现在我要感谢所有发表评论的人,并将此作为解决方案。