Я попробовал примеры сокетов 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 () и, вероятно, не имеет ничего общего с этим кодом. .