在C中向服务器套接字编程发送各种命令

时间:2015-09-18 18:31:42

标签: c sockets network-programming tcpclient tcpserver

我是套接字编程的新手,我目前正在研究一个TCP程序,它接受来自用户的各种命令(一个是ls-remote)。客户端将命令发送到服务器,然后根据命令的不同,服务器会相应地执行操作。对于ls-remote,服务器将其当前目录从运行它的文件夹发送回客户端,客户端将它们打印给用户。这很完美。但是,这应该是循环完成的,直到用户输入"退出"。这就是我的问题所在,当程序在服务器已经完成工作后再次提示用户输入另一个命令时,它就不起作用(ls-remote)。我相信它是因为close(newsockfd)在我的服务器代码的最后完成但我不明白为什么我必须关闭(newsockfd)(或者如果我想继续,我甚至应该这样做将命令发送到服务器?)。此外,如果需要关闭(newsockfd),我如何解决我的问题,以便用户可以输入命令,直到他们想要退出?这是我的代码: 请忽略其他命令,因为我还没有实现它们。

1 个答案:

答案 0 :(得分:1)

TCP是字节流协议,而不是消息协议。您需要一个消息协议,但既没有实现也没有使用它。充其量,这可能在某些时候似乎有效。

n = recv(newsockfd, buffer, 255, 0); 
if(n < 0) syserr("can't receive from client"); 
else buffer[n] = '\0';
printf("SERVER GOT MESSAGE: %s\n", buffer);

您从未实现过消息协议,但您的代码希望接收消息。因此,您希望通过魔法以某种方式实现这一点。如果要发送和接收消息,则必须编写发送和接收消息的代码。 TCP不是消息协议。

首先按字节定义消息。例如,&#34;消息是一系列字符,不包含换行符,以换行符结束&#34;。或者,&#34;消息是一个字符序列,前面是字符数,作为网络字节顺序中的16位整数&#34;。然后编写代码来发送和接收消息&#34;因为你已经定义了它们。