博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# TCP Socket通讯基础
阅读量:6205 次
发布时间:2019-06-21

本文共 6674 字,大约阅读时间需要 22 分钟。

在做网络通讯方面的程序时,必不可少的是Socket通讯。

那么我们需要有一套既定的,简易的通讯流程。

如下:

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
{ new HollXmlNode("ID","2",null), new HollXmlNode("STATE","127",null) }); //主要为了构建XML文件进行Socket的send操作 //构造后如下
//
2
//
127
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 = "
<{0} code='{1}' index='{2}'>
"; 4 5 public static XmlDocument BuildXmlDoc(string xmltype, string code, string index, List
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
_nodeatt; 6 7 8         public HollXmlNode(string tnodename, string tnodevalue, List
tnodeatt) 9         {10             _nodename = tnodename;11             _nodevalue = tnodevalue;12             _nodeatt = tnodeatt;13         }14 15 16         public string NodeName17         {18             get { return _nodename; }19             set { _nodename = value; }20         }21 22 23 24 25         public string NodeValue26         {27             get { return _nodevalue; }28             set { _nodevalue = value; }29         }30 31 32         public List
NodeAtt33         {34             get { return _nodeatt; }35             set { _nodeatt = value; }36         }37     }38 39 40     public class HollXmlAttribute41     {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 AttName54         {55             get { return _attname; }56             set { _attname = value; }57         }58 59 60         public string AttValue61         {62             get { return _attvalue; }63             set { _attvalue = value; }64         }65     }

 

你可能感兴趣的文章
交换机的基本原理配置(一)
查看>>
android baidupush
查看>>
Lottie 站在巨人的肩膀上实现 Android 酷炫动画效果
查看>>
Linux_异常_08_本机无法访问虚拟机web等工程
查看>>
“陪护机器人”研报:距离真正“陪护”还差那么一点
查看>>
深入框架本源系列 —— Virtual Dom
查看>>
mongodb分布式集群搭建手记
查看>>
您有一个上云锦囊尚未领取!
查看>>
Java Web的web.xml文件作用及基本配置(转)
查看>>
区块链101:区块链的应用和用例是什么?
查看>>
马约拉纳费米子:推动量子计算的“天使粒子”
查看>>
瑞立视:厚积薄发且具有“工匠精神”的中国品牌
查看>>
git与svn的区别 ?Git 与 SVN那个更好?
查看>>
使用ActionTrail Python SDK
查看>>
数据显示,中国近一半的独角兽企业由“BATJ”四巨头投资
查看>>
log日志轮转--logrotate
查看>>
安装输入发
查看>>
用户配置相关文件
查看>>
老王学linux-ftp
查看>>
kvm vnc的使用,鼠标漂移等
查看>>