Re[5]: Сокеты и потоки. Обмен данными между ними.
От: SCS  
Дата: 20.02.03 12:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Создал сообщения, пришлось для каждого клиента запускать еще один процесс, для получения

А>сообщений (это хорошо? есть другие варианты в данном случае?). Столкнулся с проблемой: все потоки сообщение получают, но
А>отправка данных клиенту работает только в том потоке, который отправил серверу "ALL". (причем send() везде возвращает нормальное значение)
А>Почему не работает отправка в других потоках?

А>    // создаем поток каждому клиенту для получения сообщений
А>    CreateThread(NULL,0,ThreadForMessage,(LPVOID)client,0,&id[count]);
А>    count++;

а вот здесь у тебя может возникнуть баг, count++ — этот оператор может выполняться не в том порядке, в котором ты стартуешь потоки.
А>    SOCKET client = (SOCKET) lpParam;

IMHO
наверное можно сделать duplicate для сокета. у тебя в одном потоке на нем висит синхронное чтение, а из другого потока ты что-то выводишь в сокет. похоже в буфере данные для передачи запомнились, но ни куда не передавались. (причем сокет, который принял сообщение, оправил ответ — на нем не было никакой текущей операции)



по организации — лучше использовать только один поток и асинхронный ввод/вывод по сокету.
SCS
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.