因為沒有檔案上傳,沒有大的位元組傳輸,資料過來就放到佇列,所以沒有用非同步,使用同步方式接收資料。
原理:1.前面四個位元組是訊息頭,存放訊息體長度;
2.後面位元組定義訊息體;
3.服務端收到訊息後,先獲取訊息頭部,如果不夠繼續接收;如果夠了則根據頭部計算出訊息體長度;
4.根據訊息頭標記的長度獲取訊息體,如果不夠,繼續接收;如果夠了或者有多餘,重新獲取訊息頭部,不停的迴圈;
privatevoid receive(socket socket, string
ip) ,socket已斷開,停止接收資料;");
break
; }
byte prevbytes = new
byte[1024];//
單次最多可接收的位元組
int len =socket.receive(prevbytes, prevbytes.length, socketflags.none);
var bytes = prevbytes.take(len).toarray();//
實際接收的位元組
this
.rcvheaddata(pack, bytes);
}catch
(exception ex)
,接收socket資料異常,message:,stacktrace:;");}}
});}
//////接收訊息頭
/// ///
///private
void rcvheaddata(bytepkg pack, byte
bytes);}
else
//★★★★★開始處理訊息體部分★★★★★
var bodylen = len;//
身體長度
if (skipheadlen > 0
)
this
.rcvbodydata(pack, bytes.skip(skipheadlen).take(bodylen).toarray());}}
//////
接收訊息體
/// ///
///private
void rcvbodydata(bytepkg pack, byte
bytes);}
else
//處理接收到的資料
netmsg msg = bytehelper.deserialize(pack.bodybuff);
this
.onreceivemsg(msg);
//重置訊息包
pack.resetdata();
//★★★★★開始處理訊息頭部分★★★★★
this
.rcvheaddata(pack, bytes.skip(skipbodylen).toarray());
}}
//////訊息接收類
/// public
class
bytepkg
public
void
initbodybuff()
public
void
resetdata()
}
//////位元組輔助類
/// public
class
bytehelper
public
static
byte packleninfo(byte
data)
public
static
byte serialize(t pkg) where
t : netmsg
}public
static t deserialize(byte bs) where
t : netmsg
}}
//////自定義請求資料格式
///[serializable]
public
class
netmsg
1.客戶端:先將實體序列化,轉為位元組陣列,然後同步傳送即可,無需非同步傳送
2.服務端:
先想辦法獲取訊息頭
如果訊息頭一直沒滿,那就一直獲取
如果訊息頭滿了,就計算出訊息體長度,並向下獲取訊息體
再想辦法獲取訊息體
根據訊息頭包含的訊息體長度,獲取訊息體
如果訊息體一直沒滿,那就一直獲取
如果訊息體滿了,那就重新獲取訊息頭
C Socket通訊例子
建立兩個工程檔案,server和client include include pragma comment lib,ws2 32.lib 靜態加入乙個lib檔案 pragma warning disable 4996 using namespace std intmain 繫結ip和埠 配置監聽位址...
C socket同步通訊
源博主鏈結 關於c socket通訊,分為同步和非同步通訊,本文簡單介紹一下同步通訊。通訊兩端分別為客戶端 client 和伺服器 server 1 建立乙個socket對像 2 用socket對像的connect 方法以上面建立的endpoint對像做為引數,向伺服器發出連線請求 3 如果連線成功...
C Socket非同步通訊
由於平時使用unity開發,所以相對其他的程式語言,對c 比較了解,所以寫了乙個c s的socket非同步通訊程式。目前只是在c 中測試,未來會接入unity3d,這個只是我個人用來進行學習用的,所以大家不必在意使用哪個語言做後端伺服器開發更好 一些說明 1.伺服器連線池 class conn 初始...