由於tcp/ip協議中,不能攜帶我們資料的長度,也就是說如果我們發的資料為變長度,接收端收到若干字元後就不知道是不是傳送完成了,還是要繼續等待,一般來說,vc中的解決方案為傳送端和接收端 定義一組共享的 通訊協議包,傳送按照通用介面將這些結構體包資料傳送出去,接收者判斷每個包型別,組裝成不同的結構體,完成一次網路傳輸。關鍵問題有:
1. 每個結構體包都需要在開頭定義自己的識別符號,可以用1 byte整數約定,附加的,可以定義包資料總長度(包括指標指向資料的長度)
2. 對於丁長度資料,可以不定義成員資料的長度,但是對於變長度(指標指向的資料), 必需定義包的時候,附件長度,使接收端接收後,知道還需讀取多上長度資料這個指標指向的資料傳送完畢。
3. 傳送端更具不同的包型別, 寫若干個通用的傳送函式,接收端也類似的寫相應多個的接受函式,進行迭代呼叫,很容易實現通用的傳送和接受介面,使得該介面對呼叫者完全透明。
通訊包結構體可以如下定義:
// 每個包都有的頭資訊
struct pk_head ;
struct pk_a;
struct pk_b
// 接受時
read()
;
C 使用Socket通訊
socket包括ip位址和埠號兩部分,程式通過socket來通訊,socket相當於作業系統的乙個元件。socket作為程序之間通訊機制,通常也稱作 套接字 用於描述ip位址和埠號,是乙個通訊鏈的控制代碼。注意 socket不僅可以在兩台電腦之間通訊,還可以在同一臺電腦上的兩個程式間通訊。socke...
使用C 開發Socket通訊
下面的示例顯示如何使用 socket 類向 http 伺服器傳送資料和接收響應。c public string dosocketget string server sends the get text to the host.s.send byteget,byteget.length,socketf...
Qt執行緒中使用socket作為客戶端通訊 二
qt使用執行緒的方式有兩種,一種是上次所說的繼承qthread重新實現run 函式,在run 函式中一直迴圈處理 另一種則是繼承qobject並使用movetothread 函式將物件移到子執行緒中。由於繼承qthread方式使用的並不規範,qt官方強烈建議使用繼承qobject的方式。根據之前編寫...