【发布时间】:2015-09-20 02:10:11
【问题描述】:
我对套接字编程非常陌生,我目前正在开发一个 TCP 程序,该程序接受来自用户的各种命令(一个是 ls-remote)。客户端将命令发送到服务器,然后根据命令是什么,服务器会采取相应的行动。对于 ls-remote,服务器从运行它的文件夹将其当前目录发送回客户端,然后客户端将它们打印给用户。这是完美的工作。但是,这应该在循环中完成,直到用户输入“退出”。这就是我的问题所在,当程序在与服务器完成工作后再次提示用户输入另一个命令时,它就不起作用(ls-remote)。我相信这是因为 close(newsockfd) 是在我的服务器代码最后完成的,但我不明白为什么我必须这样做 close(newsockfd) (或者如果我想继续向服务器发送命令,我是否应该这样做? )。此外,如果需要 close(newsockfd),我该如何解决我的问题,以便用户可以输入命令直到他们希望退出?这是我的代码: 请忽略其他命令,因为我还没有实现它们。
【问题讨论】:
-
您在每次
recv呼叫后尝试accept一个新客户。 -
在for循环运行一次后,它会重新开始。首先服务器
accept一个客户端,然后客户端向服务器发送一条消息,服务器接收它等等。整个事情完成后,for循环再次开始等待客户端连接,因此阻止接收任何消息。 -
是的......这应该是你的思想发挥作用的部分。
标签: c sockets network-programming tcpclient tcpserver