2012-02-23 5 views
3
кода на стороне

сервера:Отправка несколько раз данных по одному сокету

static void Main(string[] args) 
     { 
      static Socket sck; 
      Console.WriteLine("Server Started..."); 
      sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      sck.Bind(new IPEndPoint(0, 1234)); 
      while (true) 
      { 
       sck.Listen(100); 
       Socket accepted = sck.Accept(); 
       buffer = new byte[accepted.SendBufferSize]; 
       int bytesRead = accepted.Receive(buffer); 
       byte[] formatted = new byte[bytesRead]; 
       for (int i = 0; i < bytesRead; i++) 
        formatted[i] = buffer[i]; 
       string strdata = Encoding.ASCII.GetString(formatted); 
       Console.WriteLine(strdata + "\r"); 
      // sck.Close(); 
      } 

стороны клиента кода:

static void Main(string[] args) 
     { 
      static Socket sck; 
      sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      IPEndPoint localEndpt = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234); 
      try 
      { 
       sck.Connect(localEndpt); 
      } 
      catch 
      { 
       Console.Write("Unable to Connect"); 
      } 
      while (true) 
      { 
       Console.WriteLine("Enter Text"); 
       string sendtext = Console.ReadLine(); 
       byte[] Data = Encoding.ASCII.GetBytes(sendtext); 
       sck.Send(Data); 
       Console.WriteLine("Data Sent!"); 
       //sck.Close(); 
       //Console.Read(); 
      } 

Я хочу отправить текст со стороны клиента несколько раз, однако текст отправляется только в первый раз. Пожалуйста, скажите мне, где я иду не так.

ответ

1

Проблема на вашем сервере. Вы находитесь в цикле, слушая новое соединение, принимая его и получая данные. Тем не менее, что происходит, это оператор прослушивания, который видит клиент, который хочет подключиться. Ваш оператор accept фактически связывает клиента, и ваш оператор получения получает первые данные. После этого ваш сервер снова начнет прослушивать новое соединение, но не получает больше данных из уже существующего соединения. Вы должны построить цикл вокруг инструкции Accept и цикл вокруг инструкции Receive на вашем сервере, чтобы исправить эту проблему.

+0

Я переместил инструкцию для прослушивания до цикла, но я все еще сталкиваюсь с той же проблемой. – Tempo

+0

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

Смежные вопросы