Сервер выдает исключение и не запускается - PullRequest
0 голосов
/ 31 декабря 2018

В последнее время я начал узнавать о сокетах Tcp / ip в c #, поэтому я посмотрел учебники и прочитал об этом в Интернете.Я следовал руководству и создал клиент-серверное приложение, которое отправляет простой текст на сервер в той же сети.Я попытался «обновить» и заставить клиента общаться с другим клиентом, который находится в другой сети через сервер.Но теперь сервер не может начать говорить, что «Запрошенный адрес недопустим в своем контексте».

First was server running as localhost, but now when I want to clients that are in different networks communicate through server , server needs to run on my ip address so other client in different network could connect.  I did IPAddress ip = IPAddress.Parse("my IP"); and  TcpListener  server = new TcpListener(ip, 10000); I tried using different ports but its still the same. 


This is what exceptions tells me 
 at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Bind(EndPoint localEP)
   at System.Net.Sockets.TcpListener.Start(Int32 backlog)
   at System.Net.Sockets.TcpListener.Start()

 IPAddress ip = IPAddress.Parse("192.168.1.5"); //Mock IP

            TcpListener  server = new TcpListener(ip, 8080);


            TcpClient client = default(TcpClient); 
            TcpClient client2 = default(TcpClient);

            try
            {
                server.Start();
                Console.WriteLine("Server started...");


            }
            catch(Exception ex)
            {
                Console.WriteLine("Server failed to start... {0}",ex.ToString());
                Console.Read();

            }

            while (true)
            {
                client = server.AcceptTcpClient();

               client2 = server.AcceptTcpClient();

                byte[] receivedBuffer = new byte[1000]; 

                byte[] receivedBuffer2 =  new byte[1000];

                NetworkStream stream = client.GetStream(); 

                NetworkStream stream2 = client2.GetStream();

                stream.Read(receivedBuffer, 0, receivedBuffer.Length); 

                stream2.Read(receivedBuffer2, 0, receivedBuffer2.Length);

                StringBuilder message = new StringBuilder();     
                foreach (byte b in receivedBuffer) 
                {
                    if (b.Equals(126))         
                    {
                        break;
                    }
                    else
                    {
                        message.Append(Convert.ToChar(b).ToString());
                    }
                }
                StringBuilder message2 = new StringBuilder();
                foreach (byte g in receivedBuffer2)
                {
                    if (g.Equals(126))
                    {
                        break;
                    }
                    else
                    {
                        message2.Append(g);
                    }
                }
                //string message = Encoding.ASCII.GetString(receivedBuffer, 0, receivedBuffer.Length);

                Console.WriteLine(message.ToString() + message.Length);
                Console.WriteLine(message2.ToString() +message2.Length);

1 Ответ

0 голосов
/ 02 января 2019

Сообщение об ошибке The requested address is not valid in its context означает, что используемый вами IP-адрес не привязан к какому-либо сетевому интерфейсу на вашем компьютере.Как правило, вы не хотите жестко кодировать определенный IP-адрес, который вы слушаете (например, если ваш компьютер получает IP через DHCP, он может измениться).

Лучше использовать IPAddress.Any для прослушивания всех IP-адресов (например, сетевого интерфейса), доступных на аппарате.

...