Ogoun
@Ogoun
Programmer

Проблема с сокетами?

Хочу реализовать в клиент-серверном приложении следующую функциональность:

клиент остылает данные серверу, и сервер сразу по приему данных передает клиенту количество полученных байт.



Сервер:

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 блокирует поток исполнения и должен дождаться появления данных. Но почему то не дожидается.
  • Вопрос задан
  • 3404 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы