Хочу реализовать в клиент-серверном приложении следующую функциональность:
клиент остылает данные серверу, и сервер сразу по приему данных передает клиенту количество полученных байт.
Сервер:
using (SocketEx socket = new SocketEx((IntPtr)state))<br>
{<br>
byte[] data = socket.Receive();<br>
socket.Send(BitConverter.GetBytes(data.Length)); <br>
}<br>
Клиент:
public int Send(byte[] data)<br>
{<br>
int count = socket.Send(data);<br>
byte[] response = socket.Receive();<br>
if (response != null && response.Length == 4)<br>
{<br>
return BitConverter.ToInt32(response, 0);<br>
}<br>
return -1;<br>
}<br>
Протокол TCP, сокеты из стандартной библиотеки ws2_32 (обычные, не WSA).
И код на клиенте
socket.Receive();
не читает ответ сервера (recv возвращает -1), WSA ошибка пишется 10053 — соединение разорвано. Хотя дебагом на сервере метод send говорит что 4 байта отправил.
Собственно вопрос, как правильно реализовать ответ сервера клиенту? Можно ли писать в этот же сокет с которого прочитал данные?
По идее метод recv блокирует поток исполнения и должен дождаться появления данных. Но почему то не дожидается.