首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >recv()何时返回?

recv()何时返回?
EN

Stack Overflow用户
提问于 2014-09-01 11:18:22
回答 2查看 660关注 0票数 1

我使用套接字制作了一个服务器和一个客户端。我的服务器是用c语言编写的,运行在我的raspberry pi上,我的客户端是用Swift编写的,运行在我的Mac/iPhone上。

我没有得到的是当我的服务器recv()函数执行我从客户端发送的内容时?如果发送0-10字节,在关闭连接之前,它不会从recv()函数返回。但是如果我发送100+字节,它就会立即执行。

每当我从客户端写消息时,我都希望我的服务器从recv()返回。

以下是我的服务器recv()函数:

代码语言:javascript
复制
//Receive a message from client
while( (read_size = recv(sock , client_message , 2000 , 0)) > 0 )
{
    printf("%s", client_message);
}

下面是我的客户编写方法:

代码语言:javascript
复制
func SendMsg(msg:String) -> Int{
    return outputStream!.write(msg, maxLength: countElements(msg))
}

除了我无法控制服务器何时执行我的消息之外,一切都很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-01 11:39:53

默认情况下,对stdout的输出是行缓冲的,所以在使用printf时,请确保末尾有换行符('\n')。如果消息本身没有包含换行符,那么:

代码语言:javascript
复制
printf("%s\n", client_message);

另外,还请注意:在将client_message传递给printf之前,请确保正确地终止null,否则可能会遇到未定义的行为(ref )。@JoachimPileborg的评论)如果不能确保空终止,这也会起到作用:

代码语言:javascript
复制
printf("%.*s\n", read_size, client_message);
票数 6
EN

Stack Overflow用户

发布于 2014-09-01 11:34:24

服务器没有收到消息,因为客户端没有发送消息。

您需要在客户端fflush outputStream!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25604650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档