2011-11-05 86 views
0

说我想要一个有这样的C程序: 1.用户将运行一个输入字符串的客户端,例如'abc' 2.服务器将得到字符串并将其大写,然后返回'ABC' 3.客户端不会断开连接,但他可以在命令行输入更多字符串以获取结果。 4.多个客户端(5个以下)可以同时连接。TCP套接字:服务器/客户端代码结构

服务器的代码结构是什么样的?以下是我的了:

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** 

    } 

} 

特别,我不知道从哪里把接近(newsockfd),以及如何使用接受这种情况。

服务器现在只是继续前进。当有新的连接时,它会正确响应。但它会忽略任何想要再次发送内容的现有客户。

因此,用户可以输入第一个字符串,但用户的第二个字符串无法到达服务器。但是,如果我打开另一个终端,并尝试再次连接到服务器,它仍然可以工作。

非常感谢。

回答

0

子进程必须循环处理输入,并且它不能回到accept():在EOS它必须关闭接受的套接字并退出。

+0

谢谢。我有一段时间循环。它不是做这份工作吗? –

+0

@JJLiu不,它不会做这项工作。 – EJP