2009-12-23 73 views
0

我想接收來自客戶端的數據。準確地說,客戶端發送的所有數據。但後來我想發回一些數據,所以我不想關閉連接。Socket.Receive - 結束在哪裏?

也許它已經到了深夜(至少在德國) - 我該怎麼做?通常我會說我最終會放一個分號或類似的東西,但像HTTP這樣的協議也不會這麼做(或者它們是做什麼的?)。它在那裏如何工作?

謝謝,eWolf

回答

4

使用HTTP協議,Content-Length標頭用於標識預先存在多少數據。

你可以在協議中做類似的事情。

+0

內容長度標識的響應長度..只是覺得:請求是由CRLF分隔:d它是* *太晚了.. – eWolf 2009-12-23 02:07:18

+0

它不只是響應長度,它也可以是POST請求的請求長度。 – GBegen 2009-12-23 02:10:56

+0

哦,好吧,這是有道理的。 – eWolf 2009-12-23 10:14:44

1

查找空終止(0),它可以是取決於數據的編碼不同的尺寸。

ASCII將有一個1字節的空終止符。

3

如果另一端正常關閉Socket,一旦接收到所有數據表示已到達流末端,Receive調用將返回一個零值。但是,這種流結束條件是永久性的,並且阻止另一端在Socket上發送更多數據。

TCP/IP是一個流協議,不理解邏輯/應用程序特定的消息有多大。除非您使用上述的流結束指示,否則您需要在發送的數據中構建自己的指示符。這有時被稱爲「框架」。例如,發件人可能會在數據前加上後面的字節數。接收者將首先閱讀這個前綴並做一個合理的數字進行完整性檢查。然後,接收器在一個循環中調用Receive,直到接收到許多字節。

上取景良好的信息請點擊這裏:http://nitoprograms.blogspot.com/2009/04/message-framing.html