我做了一个服务器和客户端使用套接字。我的服务器是用c编写的,运行在我的树莓派上,我的客户端用Swift编写,并运行在我的Mac/iPhone上。recv()何时返回?
我不明白的是当我的服务器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))
}
一切正常旁边我在服务器执行时的控制是不是我的消息。
我不知道,如果斯威夫特发送由C代码所需要的字符串结束,所以你可能有一个可能的情况下[ *未定义的行为*](http://en.wikipedia.org/wiki/Undefined_behavior)在服务器。 – 2014-09-01 11:21:46
我也用C做了客户端。从那里我得到了同样的行为。你在说什么\ 0结束字符? – 2014-09-01 11:22:49
你确定它是'recv'而不是'printf'来缓冲数据吗?尝试在'printf'格式字符串的末尾添加''\ n''。 – 2014-09-01 11:24:41