我想接收來自客戶端的數據。準確地說,客戶端發送的所有數據。但後來我想發回一些數據,所以我不想關閉連接。Socket.Receive - 結束在哪裏?
也許它已經到了深夜(至少在德國) - 我該怎麼做?通常我會說我最終會放一個分號或類似的東西,但像HTTP這樣的協議也不會這麼做(或者它們是做什麼的?)。它在那裏如何工作?
謝謝,eWolf
我想接收來自客戶端的數據。準確地說,客戶端發送的所有數據。但後來我想發回一些數據,所以我不想關閉連接。Socket.Receive - 結束在哪裏?
也許它已經到了深夜(至少在德國) - 我該怎麼做?通常我會說我最終會放一個分號或類似的東西,但像HTTP這樣的協議也不會這麼做(或者它們是做什麼的?)。它在那裏如何工作?
謝謝,eWolf
使用HTTP協議,Content-Length標頭用於標識預先存在多少數據。
你可以在協議中做類似的事情。
查找空終止(0),它可以是取決於數據的編碼不同的尺寸。
ASCII將有一個1字節的空終止符。
如果另一端正常關閉Socket,一旦接收到所有數據表示已到達流末端,Receive調用將返回一個零值。但是,這種流結束條件是永久性的,並且阻止另一端在Socket上發送更多數據。
TCP/IP是一個流協議,不理解邏輯/應用程序特定的消息有多大。除非您使用上述的流結束指示,否則您需要在發送的數據中構建自己的指示符。這有時被稱爲「框架」。例如,發件人可能會在數據前加上後面的字節數。接收者將首先閱讀這個前綴並做一個合理的數字進行完整性檢查。然後,接收器在一個循環中調用Receive,直到接收到許多字節。
上取景良好的信息請點擊這裏:http://nitoprograms.blogspot.com/2009/04/message-framing.html
內容長度標識的響應長度..只是覺得:請求是由CRLF分隔:d它是* *太晚了.. – eWolf 2009-12-23 02:07:18
它不只是響應長度,它也可以是POST請求的請求長度。 – GBegen 2009-12-23 02:10:56
哦,好吧,這是有道理的。 – eWolf 2009-12-23 10:14:44