[英]TCP Socket: Server/Client code structure
假設我想要一個執行此操作的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。
服務器現在就繼續前進。 當有新的連接時,它將正確響應。 但是它將忽略任何想要再次發送郵件的現有客戶。
因此,用戶可以輸入第一個字符串,但是用戶的第二個字符串無法到達服務器。 但是,如果我打開另一個終端,然后嘗試再次連接到服務器,它仍然可以工作。
非常感謝。
子進程必須循環處理輸入,並且不能返回到accept():在EOS上,它必須關閉接受的套接字並退出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.