我使用套接字制作了一个服务器和一个客户端。我的服务器是用c语言编写的,运行在我的raspberry pi上,我的客户端是用Swift编写的,运行在我的Mac/iPhone上。
我没有得到的是当我的服务器recv()函数执行我从客户端发送的内容时?如果发送0-10字节,在关闭连接之前,它不会从recv()函数返回。但是如果我发送100+字节,它就会立即执行。
每当我从客户端写消息时,我都希望我的服务器从recv()返回。
以下是我的服务器recv()函数:
//Receive a message from client
while( (read_size = recv(sock , client_message , 2000 , 0)) > 0 )
{
printf("%s", client_message);
}下面是我的客户编写方法:
func SendMsg(msg:String) -> Int{
return outputStream!.write(msg, maxLength: countElements(msg))
}除了我无法控制服务器何时执行我的消息之外,一切都很好。
发布于 2014-09-01 11:39:53
默认情况下,对stdout的输出是行缓冲的,所以在使用printf时,请确保末尾有换行符('\n')。如果消息本身没有包含换行符,那么:
printf("%s\n", client_message);另外,还请注意:在将client_message传递给printf之前,请确保正确地终止null,否则可能会遇到未定义的行为(ref )。@JoachimPileborg的评论)如果不能确保空终止,这也会起到作用:
printf("%.*s\n", read_size, client_message);发布于 2014-09-01 11:34:24
服务器没有收到消息,因为客户端没有发送消息。
您需要在客户端fflush outputStream!
https://stackoverflow.com/questions/25604650
复制相似问题