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     }

c# TCP Socket通讯基础,布布扣,bubuko.com

时间: 2024-08-05 07:09:16

c# TCP Socket通讯基础的相关文章

TCP Socket 通讯(客户端与服务端)

/*----------------------------编译环境:VS2015---------------------------------------*/ /*-----------------------------Author:刘收获-------------------------------------------*/ //Sever端口 // ConsoleApplication1.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h"

Java Socket通讯---网络基础

java socket 通讯 参考慕课网:http://www.imooc.com/learn/161 一.网络基础知识 1.1 通讯示意图 1.2 TCP/IP协议 TCP/IP是世界上应用最为广泛的协议 是以TCP/IP为基础的不同层次上多个协议的集合 也称TCP/IP协议簇 或 TCP/IP协议栈 TCP:Transmission Control Protocol, 传输控制协议 IP:Internet Protocol,互联网协议 1.3 TCP/IP模型 1.4 IP地址 为实现网络中

快速学习C语言三: 开发环境, VIM配置, TCP基础,Linux开发基础,Socket开发基础

上次学了一些C开发相关的工具,这次再配置一下VIM,让开发过程更爽一些. 另外再学一些linux下网络开发的基础,好多人学C也是为了做网络开发. 开发环境 首先得有个Linux环境,有时候家里机器是Windows,装虚拟机也麻烦,所以还不如30块钱 买个腾讯云,用putty远程练上去写代码呢. 我一直都是putty+VIM在Linux下开发代码,好几年了,只要把putty和VIM配置好,其实 开发效率挺高的. 买好腾讯云后,装个Centos,会分配个外网IP,然后买个域名,在DNSPod解析过去

零配置Socket TCP消息通讯服务容器EC

EC全称是elastic communication,是基于c#实现的Socket网络通讯服务容器,支持windows .Net和mono.通过EC容器可以让开发人员在不了解Socket网络通讯知识和不进行任何配置的情况即可把逻辑应用部署到一个网络通讯服务中.EC的目标让开发人员在编写传统Socket网络通讯服务的时候就象编写asp.net应用一样简单,只需要定义消息和控制器方法即可实施一个基于网络Socket通讯应用服务程序. 以下通过一个HelloWord例程来表述一下EC在这方面的简单灵活

java socket编程基础(转)

一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构.即通信双方一方作为服务器等待客户提出请求并予以响应.客户则

你得学会并且学得会的Socket编程基础知识

这一篇文章,我将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解. 本文源代码,可以通过这里下载 http://files.cnblogs.com/chenxizhang/SocketWorkshop.rar 第一步:创建解决方案 第二步:创建服务端程序 这里可以选择“Console Application”这个类型,比较方便调试 然后编写如下代码,实现服务器的基本功能 using System; using System.Coll

Java从零开始学四十五(Socket编程基础)

一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构.即通信双方一方作为服务器等待客户提出请求并予以响应.客户则

c#socket编程基础

Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序..Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从socket套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Internet不断扩展的需要.

c#socket编程基础 [转帖]

c#socket编程基础 Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序..Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从socket套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Int