LINUX.ORG.RU

Сокеты-одновременное отправление и получение информации(C++)


0

0

Вообщем есть программа. В главном потоке он считывает некоторую информацию от пользователя и отправляет её на сервер. Второй поток должен слушать сообщения от сервера. Семафор не поставишь, иначе отправление заблокируется навечно. Как поступить? Не открывать же на клиенте порт, чтобы туда приконнектился сервер

Ответ на: комментарий от Motiv_studenta

зачем так сложно? 
сделать select([STDIN_FILENO, server_socket], NULL, NULL, NULL). Как только select выходит -- проверяешь что случилось:
1) пользователь нажал что-нть 
2) сервер прислал 
3) сигнал и т.д. 
Еще лучше для тех же целей заюзать poll

phoenix ★★★★
()
Ответ на: комментарий от Motiv_studenta

а что input и output теперь уже один поток? вродь проблем не должно быть с одновременной передачей и приемом. или я что-то не понял?

Deleted
()
Ответ на: комментарий от Deleted

>а что input и output теперь уже один поток? вродь проблем не должно быть с одновременной передачей и приемом. или я что-то не понял?

Хз. Я просто боюсь что какие-нибудь малозаметные ошибки пойдут, если мы с помощью одного сокета будем одновременно отправлять и принимать данные. Перестраховка. Или все-таки так можно делать?

Motiv_studenta ★★
() автор топика
Ответ на: комментарий от anonymous

>в твоем случае хватит одного потока на все

и как же. Я хотел так(номера=потоки):

1) Отслеживаем нажатия клавиш, отсылаем информацию об этом на сервер

2) Принимаем инфу с сервера, добавляем в очередь событий

3) Смотрим очередь событий, обрабатываем, рисуем на экране

Motiv_studenta ★★
() автор топика
Ответ на: комментарий от Motiv_studenta

Select даёт возможность прослушивания событий на куче дескрипторов. Мультиплексированием зовётся. Читай в гугле, а лучше всего у Стивенса.

anonymous
()
Ответ на: комментарий от Motiv_studenta

Хочешь telnet что ли придумать? Есть же его исходники. Посмотри в них.

eXOR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.