日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c# TCP Socket通讯基础

發布時間:2024/1/17 C# 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# TCP Socket通讯基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在做網絡通訊方面的程序時,必不可少的是Socket通訊。

那么我們需要有一套既定的,簡易的通訊流程。

如下:

<pre name="code" class="csharp">public class PublicSocket{public const string DOWNLOAD_STATUS_WAIT = "1";public const string DOWNLOAD_STATUS_PAUSE = "2";public const string DOWNLOAD_STATUS_DOWNLOADING = "3";public const string DOWNLOAD_STATUS_DOWNLOADED = "4";public const string DOWNLOAD_STATUS_ERROR = "5";//private XmlHelper xmlhelper = new XmlHelper();private TcpClient tcpMethod = new TcpClient();public static string LoginUserName = "";public static Socket HeadClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);private static string iAddress = "192.168.1.1";private static int iPort = 7888;private static IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse(iAddress), iPort);public const int LOGIN_NAMEERROR = 100000;public const int LOGIN_CODEERROR = 100001;public const int LOGIN_ERROR = 100002;public const int LOGIN_OK = 100003;public static bool AllowUpdate = true;public static void SocketConnect(){try{if (!HeadClient.Connected){HeadClient.Connect(endpoint);}}catch (Exception ex){ }}public static void SocketClose(){if (HeadClient.Connected){HeadClient.Close();}} public static void ThreadGetSingleDownloadedFile(object data) //object參數可以實現界面傳入數據進行使用 {string retMD5 = string.Empty;try{HanleListItemClass formInter = data as HanleListItemClass;XmlDocument aa = XmlHelper.BuildXmlDoc("CMD", "1", "1",new List<HollXmlNode> { new HollXmlNode("ID","2",null),new HollXmlNode("STATE","127",null) });//主要為了構建XML文件進行Socket的send操作//構造后如下 <?xml version='1.0' encoding='utf-8'?><CMD code='1' index='1'>// <ID>2</ID>// <STATE>127</STATE></CMD>byte[] sendaskbyte = Encoding.UTF8.GetBytes(aa.InnerXml.ToString());int sendcount = 0;try{sendcount = HeadClient.Send(sendaskbyte, sendaskbyte.Length, 0);}catch (Exception ex){// return LOGIN_ERROR; }if (sendcount == 0){//return LOGIN_ERROR; }int ret = SingleDownloadedFileWaitBack(formInter);}catch{//return LOGIN_ERROR; }}public static int SingleDownloadedFileWaitBack(HanleListItemClass tItemclass){byte[] RetData = new byte[36 * 1024];Array.Clear(RetData, 0, RetData.Length);int datalen = 0;try{datalen = HeadClient.Receive(RetData);if (datalen == 0){return -1;}//接收到服務器返回的信息string tcpdatastring = Encoding.UTF8.GetString(RetData).Replace("\0", " "); ;//此處可以根據自己需求處理返回的信息 http://www.cnblogs.com/sosoft/return 0;}catch (Exception ex){return 0;}}}

?

?然后再界面調用的時候,我們只需要在事件中這么使用即可

?

private void button1_Click(object sender, EventArgs e) { PublicSocket.SocketConnect(); ThreadPool.QueueUserWorkItem(new WaitCallback(SocketMethod.ThreadGetTotalState), this); }

?

同時也把構建XML的類分享出來,使得編碼更加簡便

?

1 public class XmlHelper 2 { 3 private static string xmlinit = "<?xml version='1.0' encoding='utf-8'?><{0} code='{1}' index='{2}'></{0}>"; 4 5 public static XmlDocument BuildXmlDoc(string xmltype, string code, string index, List<HollXmlNode> xmlnodes) 6 { 7 XmlDocument root = new XmlDocument(); 8 root.LoadXml(string.Format(xmlinit, xmltype, code, index)); 9 10 if (xmlnodes != null) 11 { 12 for (int i = 0; i < xmlnodes.Count; i++) 13 { 14 XmlElement parentNode = root.CreateElement(xmlnodes[i].NodeName); 15 16 XmlText descText = root.CreateTextNode(xmlnodes[i].NodeValue); 17 parentNode.AppendChild(descText); 18 19 20 if (xmlnodes[i].NodeAtt != null) 21 { 22 if (xmlnodes[i].NodeAtt.Count > 0) 23 { 24 for (int j = 0; j < xmlnodes[i].NodeAtt.Count; j++) 25 { 26 parentNode.SetAttribute(xmlnodes[i].NodeAtt[j].AttName, xmlnodes[i].NodeAtt[j].AttValue); 27 } 28 } 29 } 30 31 root.LastChild.AppendChild(parentNode); 32 } 33 } 34 35 36 return root; 37 } 38 39 40 }

?

?

1 public class HollXmlNode 2 ? ? { 3 ? ? ? ? private string _nodename; 4 ? ? ? ? private string _nodevalue; 5 ? ? ? ? private List<HollXmlAttribute> _nodeatt; 6 7 8 ? ? ? ? public HollXmlNode(string tnodename, string tnodevalue, List<HollXmlAttribute> tnodeatt) 9 ? ? ? ? { 10 ? ? ? ? ? ? _nodename = tnodename; 11 ? ? ? ? ? ? _nodevalue = tnodevalue; 12 ? ? ? ? ? ? _nodeatt = tnodeatt; 13 ? ? ? ? } 14 15 16 ? ? ? ? public string NodeName 17 ? ? ? ? { 18 ? ? ? ? ? ? get { return _nodename; } 19 ? ? ? ? ? ? set { _nodename = value; } 20 ? ? ? ? } 21 22 23 24 25 ? ? ? ? public string NodeValue 26 ? ? ? ? { 27 ? ? ? ? ? ? get { return _nodevalue; } 28 ? ? ? ? ? ? set { _nodevalue = value; } 29 ? ? ? ? } 30 31 32 ? ? ? ? public List<HollXmlAttribute> NodeAtt 33 ? ? ? ? { 34 ? ? ? ? ? ? get { return _nodeatt; } 35 ? ? ? ? ? ? set { _nodeatt = value; } 36 ? ? ? ? } 37 ? ? } 38 39 40 ? ? public class HollXmlAttribute 41 ? ? { 42 ? ? ? ? private string _attname; 43 ? ? ? ? private string _attvalue; 44 45 46 ? ? ? ? public HollXmlAttribute(string tname, string tvalue) 47 ? ? ? ? { 48 ? ? ? ? ? ? _attname = tname; 49 ? ? ? ? ? ? _attvalue = tvalue; 50 ? ? ? ? } 51 52 53 ? ? ? ? public string AttName 54 ? ? ? ? { 55 ? ? ? ? ? ? get { return _attname; } 56 ? ? ? ? ? ? set { _attname = value; } 57 ? ? ? ? } 58 59 60 ? ? ? ? public string AttValue 61 ? ? ? ? { 62 ? ? ? ? ? ? get { return _attvalue; } 63 ? ? ? ? ? ? set { _attvalue = value; } 64 ? ? ? ? } 65 ? ? }

?

轉載于:https://www.cnblogs.com/sosoft/p/3791630.html

總結

以上是生活随笔為你收集整理的c# TCP Socket通讯基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。