У меня есть клиент, который подключается к серверу, начинает отправлять двоичные данные, а когда он завершает отправку, он закрывает соединение.Если соединение закрыто, сервер знает, что клиент завершил отправку файла.
У меня есть простой класс TCP для обработки соединения.Затем у меня есть другая функция, которая отправляет данные на сервер:
TcpC tcp = new TcpC();
void send_data_to_server(){
tcp.connect();
while(read_data){
tcp.sendData();
}
Thread.Sleep(500);
tcp.disconnect();
}
Сервер использует асинхронные сокеты и имеет функцию WaitForData (), которая получает исключение при отключении клиента.Проблема заключается в том, что если я удаляю Thread.Sleep () WaitForData по-прежнему перехватывает исключение, но onDataReceive все еще не получил все данные, потому что я проверяю размер буфера в исключительной ситуации, и он намного меньше, чем при использовании Sleep ().*
Серверу придется обрабатывать много подобных операций, и я не могу позволить использовать Sleep () 'hack' для его работы.Иногда это все равно не работает, и я должен установить интервал сна на пару секунд, чтобы быть уверенным.Ни одна из других асинхронных функций на стороне сервера не вызывает исключение, кроме WaitForData ().
Как я могу немедленно закрыть соединение и при этом получить все данные?Хотя tcp.disconnect вызывается после того, как все данные все равно отправлены, я не понимаю, почему у меня возникла эта проблема.Спасибо!