C# 底层协议开发(1)

     何为协议?先撇开专业术语不说,顾名思义,就是相互合作的暗语(不怕公开的话),

比如,假如我俩商量好了,1+1=22,当我写1+1的时候,你如果写2,那就

违反协议了...

     同理,做底层开发的时候,先必须定义好 Client 与  Server(或者 Client) 的协作符号,

比如,

A : 要計算1+1=22;

B: 要計算2+2=44;

exit :  退出;

用C#開發,,代碼如下:

    class Program
    {

        static void Main(string[] args)
        {
            AppDomain.CreateDomain("socketServer").DoCallBack(
                delegate
                {
                     byte[] result = new byte[1024];
                     int myport = 8889;

                     IPAddress ip = IPAddress.Parse("192.168.2.136");
                    IPEndPoint ipe = new IPEndPoint(ip,myport);
                     Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
                         ProtocolType.Tcp);
                     serverSocket.Bind(ipe);
                     serverSocket.Listen(1);
                     Console.WriteLine("已經啟動監聽!");
                     Thread myThread = new Thread(new ThreadStart(delegate {
                         while (true)
                         {
                             Socket clientsocket = serverSocket.Accept();
                             clientsocket.Send(Encoding.UTF8.GetBytes("您好!,您已經與我取得聯繫了!"));

                             Thread receiveThread = new Thread(delegate(object clientSocket) {
                                 Socket myClientSocket = (Socket)clientSocket;
                                 string casestr ="";
                                 while (true)
                                 {
                                     int receiveNumber = myClientSocket.Receive(result);
                                     //Console.WriteLine("接受客戶端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(result, 0, receiveNumber));
                                     casestr = Encoding.UTF8.GetString(result, 0, receiveNumber);
                                     switch ( casestr)
                                     {
                                         case "A":
                                             Console.WriteLine("1+1=22");
                                             break;
                                         case "B":
                                             Console.WriteLine("2+2=44");
                                             break;
                                         default:
                                             Console.WriteLine("無此協議");
                                             break;
                                     }
                                        

                                 }
                             });

                             receiveThread.Start(clientsocket);
                         }
                           
                     }));
                     myThread.Start();
                });

            IPAddress IPCL = IPAddress.Parse("192.168.2.136");
            Socket CLSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            CLSocket.Connect(new IPEndPoint(IPCL,8889));
            Console.WriteLine("鏈接服務成功\r\n");
            byte[]rs = new byte[1024];
            int receivecount = CLSocket.Receive(rs);
            Console.WriteLine("接受消息{0}\r\n", Encoding.UTF8.GetString(rs, 0, receivecount));

            //CLSocket.Send(Encoding.UTF8.GetBytes("我是客戶端!\r\n"));
            string str = "A";
            while (true)
            {
                if (str == "exit") return;
                CLSocket.Send(Encoding.UTF8.GetBytes(str ));
                str = Console.ReadLine();
            }

 
        }

原文地址:https://www.cnblogs.com/Mayvar/p/wanghonghua_201201161037.html