Не удается подключиться к моему IP с помощью сокета - PullRequest
2 голосов
/ 01 июля 2010

сервер выдает эту ошибку «Попытка десериализации пустого потока» на стороне сервера в этой строке при запуске сервера: 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 ]

4 голосов
/ 01 июля 2010

Когда вы запускаете приложение и прослушиваете порт, запустите проверку переадресации порта здесь .

У меня была эта проблема при написании сетевого программного обеспечения - это распространенная проблема.

Убедившись, что это проблема переадресации портов, перейдите на PortForward.com . Там есть большие ресурсы, которые помогут вам настроить маршрутизатор.

1 голос
/ 21 марта 2013

У меня та же проблема, и я также за маршрутизатором и брандмауэром.Я обнаружил, что с вашим кодом localhost (127.0.0.1) работает отлично, но как только мы пытаемся подключиться к удаленному хосту, он выдает ошибку.Решение состоит в том, чтобы изменить код на стороне сервера следующим образом:

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

Надеюсь, это поможет вам ...

1 голос
/ 01 июля 2010

Брандмауэр и / или маршрутизатор / коммутатор, за которыми вы явно находитесь, являются причиной. Это потребовало бы изменения или добавления политики NAT на указанном устройстве.

...