Проблема клиента сокетов после копирования-вставки из Microsoft C# рабочий пример - PullRequest
0 голосов
/ 27 февраля 2020

Я попробовал примеры сокетов Microsoft C# do tNET и получил примеры клиента syn c и asyn c, работающие с удаленным сервером в моем интре anet. Моя проблема в том, что когда я копирую и вставляю клиентский код asyn c в свое приложение, send () не попадает на сервер. Сообщений об ошибках нет, а количество отправленных байтов соответствует запрашиваемой длине. Сервер сообщает о соединении, как и ожидалось, поэтому я озадачен тем, в чем проблема, и без сообщений об ошибках, как ее отладить.

Поскольку код снят с примера MS, я не уверен что опубликовать, это полезно, но вот источник для отправки вызова и обратного вызова. Инспекция показывает, что cmdBytes [] - это ожидаемые 3 байта в длине, а в обратном вызове bytesSent равен 3.

private static ManualResetEvent sendDone = new ManualResetEvent(false);
.... code to generate 3 cmdBytes[]
   sendDone.Reset();
   // Begin sending the data to the remote device.  
   mySocket.BeginSend(cmdBytes, 0, cmdBytes.Length, 0, new AsyncCallback(SendCallback), mySocket);
   sendDone.WaitOne();
....
   private static void SendCallback(IAsyncResult ar)
   {
      // Retrieve the socket from the state object.  
      Socket client = (Socket)ar.AsyncState;
      // Complete sending the data to the remote device.  
      int bytesSent = client.EndSend(ar);        // debugger reports bytesSent is 3
      // Signal that all bytes have been sent.  
      sendDone.Set();
   }

Обновление, дальнейшие исследования показывают, что проблема связана с connect () и, вероятно, не имеет ничего общего с этим кодом. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...