Многопоточный Tcp/ip сервер
Сервер получает сообщения от клиента, и вроде отправляет сообщение обратно, но клиенту сообщение не доходит (даже OnRead не срабатывает).
Посмотри в отладчике код завершения отправки клиенту, м.б. сам поймешь.
Функция SendBuf(..) вообще говоря возвращает число реально переданных байт. Кроме того возможна генерация ESocketError при разных неприятностях с завершением thread.
Я в свое время реализовал именно то, что ты сейчас делаешь - многопоточный сокет-сервер и уже несколько лет все пашет без замечаний (оформлен как ActiveX - есть парный клиент). Для TSocketServer есть одна тонкость - нельзя использовать его методы внутри обработки его же событий. Т.е. в событии OnRead нельзя вызывать SendBuf, SendText. Мне пришлось реализовать внутренние списки сообщений для клиентов (потокозащищенные). За отправку клиентам отвечает отдельный поток.
Функция SendBuf(..) вообще говоря возвращает ...
Так в том то и дело, что сервер пишет что передал столько байт сколько надо (только не Socket->SendBuf, а TWinSocketStream->Write но вроде разницы нет), ошибок не возникает, и в TSocketServer я только на событии GetThread создаю новый SocketThread в котором переопределено сообщение ClientExecute и каждому клиенту выделяется свой поток и все говорят что отправляют сообщения правильной длины, но не до одного клиента сообщение не доходит :(, или может я тебя не правильно понял ???
Вот может быть здесь и проблема, не получается в потоке обработки события организовать запись. Я был вынужден разорвать эту связь. Конкретно: для TSocketServer (stNonBlocking) определены события:
1)OnAccept, 2)OnClientConnect, 3)OnClientDisconnect, 4)OnClientRead, 5)OnClientError.
1и5) информационные; 2и3) работа со списком клиентов; 4) прием информации
Каждый клиент - это список сообщений+параметры логина. Отправка информации - размещение сообщения в списке клиентов.
Есть отдельный поток, который анализирует текущий список клиентов и отправляет (у меня SendText) подготовленные для него сообщения, если клиент готов(я опционально анализирую готовность клиента, т.к. их частично делали на VFP и они захлебывались).
При этом у меня очень туманные представления о TCP/IP, но все работает с десятками клиентов (часть модемные) неделями и гонять приходится килобайтами.
У клиента тоже есть тонкости, т.к. пакеты могут нарезаться и надо обеспечить их сборку.