На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Вопрос по сокетам
    Привет всем. При работе с асинхронными сокетами возникла такая проблема: клиент отправляет команды на сервер и получает в ответ какие-то данные. Есть одна команда, приняв которую сервер постоянно отправляет данные клиенту, пока не придет команда остановки. Вопрос в том, как правильно организовать прием этих данных и отправку команды остановки, если сервер постоянно отправляет данные?
    Сообщение отредактировано: Malicious -
      Malicious код в студию
        Цитата Malicious @
        как правильно организовать прием этих данных и отправку команды остановки

        Организовать чтение и запись в разных потоках.
          Отшельник
          Код взял из примера по асинхронным сокетам тут же на форуме. А дальше что-то не могу сообразить.

          TerraGhost
          Был бы очень признателен за пример.
            ExpandedWrap disabled
              using System;
              using System.IO;
              using System.Net;
              using System.Net.Sockets;
              using System.Threading;
               
              namespace ExampleSockets.Server
              {
                  internal static class Program
                  {
                      private static void Main ()
                      {
                          TcpListener tl = new TcpListener (IPAddress.Loopback, 12345);
                          tl.Start ();
               
                          using (TcpClient connection = tl.AcceptTcpClient())
                          {
                              ThreadPool.QueueUserWorkItem (obj =>
                              {
                                  using (StreamReader reader = new StreamReader (connection.GetStream ()))
                                  {
                                      while (true)
                                      {
                                          Console.WriteLine ("Recived: {0}", reader.ReadLine ());
                                      }
                                  }
                              });
               
                              using (StreamWriter writer = new StreamWriter (connection.GetStream ()))
                              {
                                  while (true)
                                  {
                                      string sendingMessage = Console.ReadLine ();
               
                                      writer.WriteLine (sendingMessage);
                                      writer.Flush ();
               
                                      Console.WriteLine ("Sended: {0}", sendingMessage);
                                  }
                              }
                          }
                      }
                  }
              }


            ExpandedWrap disabled
              using System;
              using System.IO;
              using System.Net.Sockets;
              using System.Threading;
               
              namespace ExampleSockets.Client
              {
                  internal static class Program
                  {
                      private static void Main ()
                      {
                          using (TcpClient connection = new TcpClient ("localhost", 12345))
                          {
                              ThreadPool.QueueUserWorkItem (obj =>
                              {
                                  using (StreamReader reader = new StreamReader (connection.GetStream ()))
                                  {
                                      while (true)
                                      {
                                          Console.WriteLine ("Recived: {0}", reader.ReadLine ());
                                      }
                                  }
                              });
               
                              using (StreamWriter writer = new StreamWriter (connection.GetStream ()))
                              {
                                  while (true)
                                  {
                                      string sendingMessage = Console.ReadLine ();
               
                                      writer.WriteLine (sendingMessage);
                                      writer.Flush ();
               
                                      Console.WriteLine ("Sended: {0}", sendingMessage);
                                  }
                              }
                          }
                      }
                  }
              }
              Спасибо! Сейчас буду экспериментировать.
                Оп, а куда второй пример делся?
                  Большое спасибо за помощь, разобрался и решил проблему используя только асинхронные сокеты.
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0223 ]   [ 15 queries used ]   [ Generated: 19.05.24, 13:25 GMT ]