簡體   English   中英

套接字接收數據未完成

[英]Socket Receive data not completed

我寫了一個簡單的套接字,該套接字將特定的請求發送到Internet服務器並接收響應,但是當發送的請求和套接字進入返回值的接收模式結果不完整時,例如只有1075字節的25000字節接收,我遇到了問題。

Socket skt = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
skt.Connect(hdr.Host, 80);

byte[] req_as_bytes = Encoding.UTF8.GetBytes(RequestParam);
SentLength = skt.Send(req_as_bytes);
skt.Send(Data, SocketFlags.None);

ReturnLength = skt.Receive(Data);

skt.Shutdown(SocketShutdown.Both);
skt.Close();

但是當我在skt.recive()數據之前睡一覺時,會像這樣的代碼從服務器強制接收

Socket skt = new Socket(AddressFamily.InterNetwork, SocketType.Stream,             ProtocolType.Tcp);
skt.Connect(hdr.Host, 80);
byte[] req_as_bytes = Encoding.UTF8.GetBytes(RequestParam);
SentLength = skt.Send(req_as_bytes);
skt.Send(Data, SocketFlags.None);

System.Threading.Thread.Sleep(4000);

ReturnLength = skt.Receive(Data);

skt.Shutdown(SocketShutdown.Both);
skt.Close();

解決此問題的最佳解決方案是什么

socket.Receive返回讀取的數據數。 參見http://msdn.microsoft.com/en-us/library/8s4y8aff.aspx

您應該檢查ReturnLength並循環,直到收到期望的數據為止。

TCP是面向流的協議。 您將按照發送的順序接收數據,但不能保證發送和接收的數據塊相等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM