[英]flush buffer in a boost::asio program
基本上我正在使用boost socket庫編寫一個簡單的程序......我有兩個程序,一個客戶端和一個服務器。 服務器等待來自客戶端的連接,當它找到一個客戶端向服務器發送消息並且服務器打印出來時,這在客戶端第一次查詢服務器時工作但是一段時間后奇怪的模式開始讓我們說服務器是運行,我通過執行以下兩次使用客戶端程序:
./client localhost name message
./client localhost name test
服務器的輸出首先是:
name: message
然而,接下來它會顯示
name: testage
我不知道為什么會這樣,但我知道它必須是服務器,因為每個客戶端都獨立發送一個數據包,服務器只是打印出來...我認為這與套接字緩沖區有關沒有被沖洗或者那種性質......
無論如何繼承源代碼:client.cpp
http://pastebin.com/hWpLNqnW
server.cpp
http://pastebin.com/Q4esYwdc
服務器中的read_some
調用返回讀取的字節數。 您應該使用該值並使用它來終止緩沖區。 這些方面的東西:
int len = connection.read_some(boost::asio::buffer(buf), error);
buf[len] = '\0';
在第一條消息中,緩沖區可能已使用零初始化。 但是,下一次,它將包含與上一次迭代相同的內容。 注意strcpy(buf,"");
call只會將buf
的第一個字節設置為零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.