Как я могу принять несколько клиентов на TCP-сервер?
в настоящее время у меня установлен TCP-сервер, который может принимать соединение от клиента и эхо-сигналы от клиента. Как я могу заставить несколько клиентов подключиться к серверу и отправить их ввод всем клиентам?
Кажется, я должен раскошелиться, но я не совсем уверен, как...
на сервере я должен разместить бесконечный цикл, начиная с accept (или listen?), что будет вилка, когда есть новое подключение? Затем дочерний процесс, я бы закройте сокет из предыдущего процесса и подключитесь к новому, но я снова не совсем уверен.
как будет выглядеть псевдо-код в отношении только манипуляции вилками и сокетами? Моя догадка:
while(1) //before connection or accept?
pid = fork()
if(pid==0)
// open socket from client
// run the rest of the code
// end process when client disconnects
else
// close socket from client
2 ответов
вы можете найти в интернете много примеров, сначала я нашел: http://www.tutorialspoint.com/unix_sockets/socket_server_example.htm
имейте в виду, что процесс (или поток) на клиентский подход не масштабируется хорошо. Современные серверы используют неблокирующий основной цикл диспетчеризации. Взгляните на libevent.
вот пример использования echo server libevent: https://github.com/jasonish/libevent-examples/tree/master/echo-server
получается псевдо-код выглядит так:
while(1) //before listen
pid = fork; //right after accept
if(fork>0)
close sd2 ( sd2 = accept(....) )
continue
else
run the rest of the program