c чат на сокетах



Автор Вадим Литвин задал вопрос в разделе Другие языки и технологии

Хочу написать чат на сокетах. C++. Сделал так, что писать можно клиент-сервер (у) по очереди. и получил лучший ответ

Ответ от Иван Дурак[гуру]
судя по вопросу, сокеты TCP. А это значит, что данные образую непрерывный поток и внутри потока нет никаких маркеров начала / конца сообщения. Все посылаемые куски данных просто склеиваются в единую колбасу.
В итоге принимающая сторона не знает, где кончается сообщение. И всё зависит от того, как ты вычитываешь из потока данные.
Самое тупое - читать и выводить по одному символу. Что получил - то сразу и печатаем.
Если хотим отправлять обособленные сообщения - нужно придумывать свой формат, позволяющей принимающей стороне понять, что сообщение кончилось. Это может быть пара байт в начале каждого сообщения, которые задают его длину. Это может быть xml формат, который сам определяет конец документа. Ну и что там нафантазируешь.
Вот когда определимся с механизмом разграничения, переписываем функцию получения. Сейчас, я так подозреваю, там стоит recv с каким-нибудь офигенно большим буффером, который никак не может заполниться и, соответственно, не возвращает управления

Ответ от Алексей Мандрыкин[гуру]
Предыдущий ответ в целом верен, а про потоки ответ может быть очень длинным. Чат под какую платформу? Если для Linux/BSD/etc то читай описание функции pthread_create, для MS Windows нужно читать о функции CreateThread
-
Смысл потоков в том, что они исполняются параллельно (псевдопараллельно на однопроцессорных/одноядерных системах) . Но сложность потоков не в их создании, а в синхронизации. Если не заботиться о синхронизации и защите данных от одновременного доступа, то программа быстро упадёт. В общем, ищи примеры с pthread_create или CreateThread в зависимости от платформы, для которой пишешь свой чат. Google/Yandex в помощь.

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Хочу написать чат на сокетах. C++. Сделал так, что писать можно клиент-сервер (у) по очереди.
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*