На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Сервер продолжает получать пустые сообщения после вызова метода Socket.Send , на клиенте в программе на C#
    Есть сервер с сокетом, который выдает ответы на запросы. Связь с ним нормально работает через модем. Необходимо подключиться к нему с помощью программы на C# через сетевую карту на локальном компьютере. Пытаюсь сделать это с помощью кода ниже. Вместо myIPAddress и myPort в нем указаны значения IP-адреса и порта на сервере. Отправляю запрос на сервер и получаю ответ. Но после запроса на сервер с клиента отправляется несколько пустых строчек, это видно в логах на сервере. При связи через модем с использованием команд модема в готовой программе такого нет. Как сделать так, чтобы клиент не отправлял пустых строк на сервер после запроса, ждал ответа с сервера, а при необходимости снова отправлял запрос? Попытка закрыть, а потом снова открыть соединение выдает исключение Cannot access a disposed object, и все равно отправляется несколько пустых строк. Поиском нашел только одну ссылку с похожей проблемой.
    https://stackoverflow.com/questions/4450575...g-empty-message
    Автор вопроса сказал, что ему помог первый ответ в теме, у меня он не решает проблему, сервер продолжает отправлять пустые сообщения.
    ExpandedWrap disabled
      private void button1_Click(object sender, EventArgs e)
              {
                  byte[] bytes = new byte[1024];
                  IPAddress ipAddress = IPAddress.Parse("myIPAddress");
                  IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, myPort);            
                  Socket mySocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                  mySocket.Connect(ipEndPoint);
                  mySocket.Send(Encoding.UTF8.GetBytes("test\r"), 0, 4, SocketFlags.None);
                  Thread.Sleep(100);            
                  mySocket.Receive(bytes);
                  MySocket.Shutdown(SocketShutdown.Both);
                  MySocket.Close();
                  MessageBox.Show(Encoding.UTF8.GetString(bytes));
              }

    Ответ по ссылке, который у меня не решает проблему.
    ExpandedWrap disabled
      private void ReceiveMessage()
              {
                  while (true) {
                      if(_client.Available > 0) {
                          byte[] buffer = new byte[1024];
                          _client.Receive(buffer);
                          Console.WriteLine("A message has been received : " + Encoding.ASCII.GetString(buffer));
                      }
                  }
              }
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0232 ]   [ 16 queries used ]   [ Generated: 28.03.24, 11:49 GMT ]