分享 C tcp通訊 收發報文

2021-10-01 07:06:02 字數 1687 閱讀 7929

首先我們先來了解一下tcp通訊吧,我們都知道tcp通訊的過程會經過三次握手,四次揮手,這次我們不詳細來講解這些,我們來看看實際使用接收和傳送資料是怎麼操作吧,先看以下的**:

1、使用networkstream接收tcp報文

public void startaccept()

it1 += ct1;

}string head = system.text.encoding.getencoding("gbk").getstring(cread);

int len = int.parse(head);

byte text = new byte[len];

int it = 0;

while (it < len)

it += ct;

}string body = encoding.getencoding("gbk").getstring(text);

//此處增加長度計算

xmldocument doc = new xmldocument();

doc.loadxml(body);

...byte senddata = encoding.getencoding("gbk").getbytes(sendebank);

if (ns.canwrite)

ns.close();

}catch (exception ex)

finally

}

這裡是使用到netsteam類庫,用於接收tcp報文,一般tcp報文是由報文長度+報文內容組成,首先讀取前面規定長度的報文長度,比如說6位長度的報文長度,如000012+12位位元組長度的報文內容,讀取完長度之後接著讀取報文內容,然後進行解析。

這裡**是因為報文內容是xml,所以把他解析成xmldocument,進而進行操作,通過一系列操作再返回相應的報文回去,這個就是乙個簡單的接收報文+解析報文+處理報文+返回報文的過程。

2、使用tcpclient傳送tcp報文。

public  string  senddata(string sendstr,string trandtype,string nodeno)

catch (exception exc)

networkstream ns = sendtcp.getstream();

ns.writetimeout = timeout;

ns.readtimeout = timeout;

tryif (b > 0)

}else

if (ns.canread)

index += ct;

}ns.close();

sendtcp.close();

string recvstr = lenl + encoding.getencoding("gbk").getstring(recbuff);

return recvstr;}}

else

}catch (exception ex)

return recverror("**伺服器返回超時");

}

傳輸資料是把我們的報文按指定的編碼格式轉化成位元組流,寫到netstream上,完了之後就是持續等待直至報文返回在netstream上,即可收到返回報文,超時則會丟擲異常另外處理。

簡單的c TCP通訊

tcp 通訊 2009年8 月23日星期日 伺服器using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system...

c TCP高效能通訊

開篇都是吹牛逼哈。我原本打算使用dotnetty來解決傳輸問題,但是試了下沒有成功,也沒有找到相關問題解決方法,匯出原始碼,好大啊。暫時不想研究,而且是.net core的。最後沒有辦法,就自己封裝了。我就不上 了,已經傳到git上面了,和其它專案。我主要介紹過程原理,1.isocketchanne...

UART通訊收發

在使用串列埠時,只需掌握zigbee協議棧提供的串列埠操作相關的三個函式即可。uint8 haluartopen uint8 port,haluartcfg t config uint16 haluartread uint8 port,uint8 buf,uint16 len uint16 halu...