gpt4 book ai didi

c - recv() 什么时候返回?

转载 作者:搜寻专家 更新时间:2023-11-01 05:51:34 25 4
gpt4 key购买 nike

我已经使用套接字制作了一个服务器和一个客户端。我的服务器是用 c 编写的,在我的树莓派上运行,我的客户端是用 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))
}

除我无法控制服务器何时执行消息外,一切正常。

最佳答案

stdout 的输出默认是行缓冲的,所以当使用 printf 时,确保有一个换行符('\n' ) 在最后。如果消息本身尚未包含换行符,则:

printf("%s\n", client_message);

作为旁注:还要确保 client_message 在将其传递给 printf 之前正确地以 null 终止,否则您可能会遇到未定义的行为(引用 @JoachimPileborg 的评论).如果您不能确保空终止,这也可以解决问题:

printf("%.*s\n", read_size, client_message);

关于c - recv() 什么时候返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25604650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com