Многопоточный tcp\ip сервер
http://bdn.borland.com/article/0,1410,26276,00.html в потоке не получается отправить сообщение обратно клиенту ( pStream->Write( buffer, sizeof(buffer)); ) сервер вроде пишет что отправил, а у клинта даже OnRead не срабатывает, если кто-нибуть сталкивался с чем-нибудь похожим напишите пожалуйста, буду очень благодарен.
Если у тебя сервер отвечает на запрос клиента, то тебе не нужно дожидаться никакого события OnRead. Необходимо просто сразу же после отправки запроса читать из сокета (или клиентского компонента в твоем случае) данные. А OnRead скорее всего происходит либо перед фактическим чтением данных, либо после.
Цитата:
Originally posted by DrCoder
Если у тебя сервер отвечает на запрос клиента ...
Если у тебя сервер отвечает на запрос клиента ...
Так ведь с однопоточными (NonBlocking) OnRead работает и все хорошо принимает. А сервер должен одновременно держать много соединений и не до каждого клиента сообщение доходит сразу после отправки запроса, может несколько минут пройти, так что мне кажется нужно реагировать на событие.
Я хоть и не великий спец в сетевых приложениях, но сколько я не писал их, постоянно приходилось самому делать Recv.
Если ты не можешь получить ответ сразу, но при этом соединение не прерывается, тебе необходимо написать тред для клиента, который будет ожидать пакеты от сервера, либо с фиксированным таймаутом, либо с infinite да пока соединению дисконнект не пришел :)))
Или может быть у тебя компоненты TCP навороченные, что сами читают из соккета ?
Цитата:
Originally posted by DrCoder
Ну даже и не знаю, что тебе сказать.
Я хоть и не великий спец в сетевых приложениях, но сколько я не писал их, постоянно приходилось самому делать Recv.
Если ты не можешь получить ответ сразу, но при этом соединение не прерывается, тебе необходимо написать тред для клиента, который будет ожидать пакеты от сервера, либо с фиксированным таймаутом, либо с infinite да пока соединению дисконнект не пришел :)))
Или может быть у тебя компоненты TCP навороченные, что сами читают из соккета ?
Ну даже и не знаю, что тебе сказать.
Я хоть и не великий спец в сетевых приложениях, но сколько я не писал их, постоянно приходилось самому делать Recv.
Если ты не можешь получить ответ сразу, но при этом соединение не прерывается, тебе необходимо написать тред для клиента, который будет ожидать пакеты от сервера, либо с фиксированным таймаутом, либо с infinite да пока соединению дисконнект не пришел :)))
Или может быть у тебя компоненты TCP навороченные, что сами читают из соккета ?
Да уж похоже что на клиенте придется все делать вручную, это лучше чем ничего не делать. Спасибо за подсказку! А компоненты вроде самые обычные ClientSocket и ServerSocket.
Вот блин, новая проблема возникла: до 10 Мбайт файлы пролетают просто супер, а вод если файл больше то почему-то начинает замедлятся(причем серьезно замедлятся). А с однопоточным серверов все нормально, ничего не замедляется.
Цитата:
Originally posted by ilyes
...до 10 Мбайт файлы пролетают просто супер ...
...до 10 Мбайт файлы пролетают просто супер ...
Выложи кусок кода, серверную и клиентскую часть при передаче файла
Извиняюсь, я проглючил, забыл MemoryStream->SetSize сделать...