Я пишу простой клиент и сервер для обмена мгновенными сообщениями, чтобы разобраться с программированием сокетов.
У моего клиента есть два потока:
- Поток A имеет соединение с сервером через потоковое сокет и выполняет чтение в цикле, печатая строки текста, которые он получает от сервера. Если строка чтения возвращает EOF, цикл завершается.
- Поток B прослушивает ввод с клавиатуры от пользователя, используя fgets в цикле. Когда пользователь нажимает ввод, он отправляет строку на сервер (чтобы он мог переслать ее другому клиенту).
Когда пользователь нажимает Ctrl-D, клиент отправляет на сервер специальное сообщение о том, что «клиент хочет отключиться», после чего сервер закрывает дескриптор файла подключения для этого пользователя. Это заставляет поток A выйти из цикла, поскольку функция readline возвращает EOF. Затем поток A закрывает дескриптор файла подключения и завершает работу.
Тем временем поток B все еще слушает ввод пользователя с клавиатуры, пока он не нажмет Enter. В идеале fgets прерывались бы раньше и давали бы пользователю знать, что другой клиент отключился.
Есть ли что-то еще, или мне нужно использовать другую функцию ввода или библиотеку?
pthread
s?) - person Mike   schedule 15.01.2014