我做了一個服務器和客戶端使用套接字。我的服務器是用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