2015-11-27 4 views
1

Код ниже пример кода Microsoft для TcpListener, но я не могу работать, что:TcpListener не принимает TcpClient

using System; 
using System.Net; 
using System.Net.Sockets; 

public class TcpListenerSample 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      // set the TcpListener on port 13000 
      int port = 13000; 
      TcpListener server = new TcpListener(IPAddress.Any, port); 

      // Start listening for client requests 
      server.Start(); 

      // Buffer for reading data 
      byte[] bytes = new byte[1024]; 
      string data; 

      //Enter the listening loop 
      while (true) 
      { 
       Console.Write("Waiting for a connection... "); 

       // Perform a blocking call to accept requests. 
       // You could also user server.AcceptSocket() here. 
       TcpClient client = server.AcceptTcpClient(); 
       Console.WriteLine("Connected!"); 

       // Get a stream object for reading and writing 
       NetworkStream stream = client.GetStream(); 

       int i; 

       // Loop to receive all the data sent by the client. 
       i = stream.Read(bytes, 0, bytes.Length); 

       while (i != 0) 
       { 
        // Translate data bytes to a ASCII string. 
        data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); 
        Console.WriteLine(String.Format("Received: {0}", data)); 

        // Process the data sent by the client. 
        data = data.ToUpper(); 

        byte[] msg = System.Text.Encoding.ASCII.GetBytes(data); 

        // Send back a response. 
        stream.Write(msg, 0, msg.Length); 
        Console.WriteLine(String.Format("Sent: {0}", data)); 

        i = stream.Read(bytes, 0, bytes.Length); 
       } 

       // Shutdown and end connection 
       client.Close(); 
      } 
     } 
     catch (SocketException e) 
     { 
      Console.WriteLine("SocketException: {0}", e); 
     } 

     Console.WriteLine("Hit enter to continue..."); 
     Console.Read(); 
    } 
} 

Код остаться в петле в этой строке:

TcpClient client = server.AcceptTcpClient(); 

Я отключил брандмауэр, но ничего не изменилось.

Как я могу это решить?

+0

Вы пытались соединиться с этим сервером? – Ksv3n

+0

Вы можете взглянуть на этот вопрос, возможно, это поможет вам найти вашу проблему: http://stackoverflow.com/a/19476156/2865804 – Mickey

+2

Он должен «оставаться» на этой линии, пока вы не подключитесь к порту 13000. Вы можете легко попробуйте это, пока он «остается» там, запустив командную строку и выдав telnet 127.0.0.1 13000 на том же компьютере. (У вас должен быть установлен клиент telnet. Как установить его вне области действия). Затем он должен перейти к следующей строке. –

ответ

0

AcceptTcpClient() - блокирующий вызов, который будет блокироваться до тех пор, пока клиент не подключится к вашему TcpListener. Поэтому вам нужно использовать какое-то клиентское приложение для тестирования вашего сервера и подключения к нему. Для этого вы можете использовать Putty.