无法使用Socket连接到我的IP

时间:2010-06-30 23:44:37

标签: c# sockets ip

当我运行服务器时,服务器在此行中抛出此错误 “尝试在服务器端反序列化空流” this.tcpListener.Start();

这是我的互联网IP,如果我使用我的本地IP,它可以工作。但我想要互联网IP。

客户端:

TcpClient tcpclnt = new TcpClient();
Console.WriteLine("Connecting.....");
tcpclnt.Connect("187.115.131.44", 8001);

服务器端:

    public Server()
    {
        try
        {
            IPAddress ip = IPAddress.Parse("187.115.131.44");
            tcpListener = new TcpListener(ip, 8001);
            listenThread = new Thread(new ThreadStart(ListenForClients));
            listenThread.Start();
        }

        catch (Exception e)
        {
            Console.WriteLine("Error..... " + e.StackTrace);
            Console.ReadKey();
        } 

    }

    private void ListenForClients()
    {
        this.tcpListener.Start();

        while (true)
        {
            //blocks until a client has connected to the server
            TcpClient client = this.tcpListener.AcceptTcpClient();

            //create a thread to handle communication
            //with connected client
            Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
            clientThread.Start(client);
        }
    }

3 个答案:

答案 0 :(得分:4)

当您启动应用程序并正在侦听端口时,请运行端口转发检查here

编写网络软件时遇到了这个问题 - 这是一个常见的问题。

一旦您确认其端口转发问题,请转到PortForward.com。有很多资源可以帮助您配置路由器。

答案 1 :(得分:1)

您明显落后的防火墙和/或路由器/交换机是原因。这需要在所述设备上更改或添加NAT策略。

答案 2 :(得分:1)

我遇到了同样的问题,我也在路由器和防火墙之后。我发现使用你的代码localhost(127.0.0.1)是完美的,但是一旦我们尝试连接到远程主机就会出错。解决方案是更改服务器端代码,如下所示:

tcpListener = new TcpListener(IPAddress.Any, 8001);

希望这会对你有帮助......