各位大神,請指教!
VS2015,MFC,C++,用AfxSocketInit()函式加載的套接字,用socket()函式創建套接字,TCP形式
確認服務器與客戶端連接成功以后,服務器向客戶端發送資料,進行以下實驗:
實驗1:
步驟1:客戶端執行recv(SockClient, recvtext1, 100, 0)函式,執行后,進入阻塞。
步驟2:服務端執行int abc1 = send(sockConn, sendtext1, strlen(sendtext1)+1 , 0)函式,執行后,步驟 1中的recv函式解除阻塞,recvtext1中內容與服務器的發送資料一致。
步驟3:客戶端執行recv(SockClient, recvtext2, 100, 0)函式,執行后,進入阻塞。
步驟4:服務端執行int abc2 = send(sockConn, sendtext2, strlen(sendtext2)+1 , 0)函式,執行后,步驟 3中的recv函式解除阻塞,recvtext2中內容與服務器的發送資料一致。
結果:資料正常。
實驗2:
步驟1:服務端執行int abc1 = send(sockConn, sendtext1, strlen(sendtext1)+1 , 0)函式,執行后,abc1 為5,與發送資料量一致,表示發送成功。
步驟2:客戶端執行recv(SockClient, recvtext1, 100, 0)函式,執行后,recvtext1中內容與服務器的發送 資料一致。
步驟3:服務端執行int abc2 = send(sockConn, sendtext2, strlen(sendtext2)+1 , 0)函式,執行后,abc2 為5,與發送資料量一致,表示發送成功。
步驟4:客戶端執行recv(SockClient, recvtext2, 100, 0)函式,執行后,recvtext2中內容與服務器的發送 資料一致。
結果:資料正常。
實驗3:
步驟1:服務端執行int abc1 = send(sockConn, sendtext1, strlen(sendtext1)+1 , 0)函式,執行后,abc1 為5,與發送資料量一致,表示發送成功。
步驟2:服務端執行int abc2 = send(sockConn, sendtext2, strlen(sendtext2)+1 , 0)函式,執行后,abc2 為5,與發送資料量一致,表示發送成功。
步驟3:客戶端執行recv(SockClient, recvtext1, 100, 0)函式,執行后,recvtext1中內容為服務器第一次 發送的資料,即sendtext1。
疑問:為什么接收到的內容不是sendtext1+sendtext2?為什么sendtext2被丟棄了?在哪個環節出的問題,如 果想在步驟3中收到sendtext1+sendtext2(即多次send,1次recv時)應該怎么改?

uj5u.com熱心網友回復:
如果send的位元組數(第三個引數)與發送內容一致的話,就不會出現實驗3中的問題,兩次send后再recv時,收到的資料是前兩次之和;如果send的位元組數(第三個引數)大于發送的內容時,就會出現實驗3的現象!請大神指點一下!感激!uj5u.com熱心網友回復:
剛才試了一下,如果發送端這么寫:char sendtext1[]="se\0nd1";
int abc1=send(sockConn,sendtext1,strlen(sendtext1)+1,0);
那么執行此處的send后,abc1為3,即發到\0時就認為結束了!把后面的nd1丟棄了,請問大神怎樣才能把這個字串發送完整?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/81990.html
標籤:網絡通信
上一篇:IPhone手機如何刷機
下一篇:有誰會嗎,求解。
