Скажем, я хочу иметь программу на C, которая делает это:
1. Пользователь запустит клиент со строкой ввода, например, 'abc'
2. Сервер получит строку и сделает ее заглавной, а затем вернет «ABC»
3. Клиент НЕ будет отключен, но он может ввести больше строки в командной строке, чтобы получить результат.
4. Несколько клиентов (до 5) могут быть подключены одновременно.
Как выглядит структура кода для сервера? Вот что я получил:
master_socket = socket();
bind();
listen();
while(true)
{
**int newsockfd = accept();
if (newsockfd < 0)
//server keeps coming to here
continue; //no new connection
else
{**
int pid = fork();
if (pid == -1) { /* fork() failed */
perror("fork");
exit(EXIT_FAILURE);
}
//parent
if (pid > 0)
{
close(newsockfd);
waitpid(pid, NULL, WNOHANG);
}
else
{
close(master_socket);
//receive input string
receive();
modify();
//send back string
send();
}
//close(newsockfd); **//not sure where to put**
}
}
В частности, я не знаю, куда ставить close (newsockfd) и как использовать accept в этом случае.
Сервер сейчас просто продолжает идти дальше. Когда будет новое соединение, оно ответит правильно. Но он игнорирует любого существующего клиента, который хочет что-то отправить снова.
Таким образом, пользователь может ввести первую строку, но вторая строка пользователя не может достичь сервера. Но если я открою другой терминал и попытаюсь снова подключиться к серверу, он все равно сможет работать.
Большое спасибо.