Mad*_*erg 1 c sockets stream recv swift
我使用套接字创建了一个服务器和一个客户端.我的服务器是用c语言编写的,运行在我的覆盆子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);
}
Run Code Online (Sandbox Code Playgroud)
这是我的客户端写方法:
func SendMsg(msg:String) -> Int{
return outputStream!.write(msg, maxLength: countElements(msg))
}
Run Code Online (Sandbox Code Playgroud)
一切正常,除了我无法控制我的服务器何时执行我的消息.
stdout
默认情况下,输出到行缓冲,因此在使用时printf
,请确保最后有换行符(\n '\n'
).如果邮件本身尚未包含换行符,则:
printf("%s\n", client_message);
Run Code Online (Sandbox Code Playgroud)
作为旁注:还要确保client_message
在传递之前正确地终止null printf
,否则可能会遇到未定义的行为(参考@JoachimPileborg的评论).如果你不能确保null终止,那么这也可以解决问题:
printf("%.*s\n", read_size, client_message);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
425 次 |
最近记录: |