套接字编程

套接字的工作流程

 

 

服务端代码:这里是阻塞的方式

 

 IPAddress ipHost = Dns.GetHostEntry(Dns.GetHostName()).AddressList.First(x => x.AddressFamily == AddressFamily.InterNetwork);
            IPEndPoint ipedp = new IPEndPoint(ipHost, 11000);

            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                sock.Bind(ipedp);
                Console.WriteLine("Server listen");
                sock.Listen(500);

                while (true)
                {
                    Socket handle = sock.Accept();
                    string data = null;

                    while (true)
                    {
                        byte[] bt = new byte[1024];
                        int byteRes = handle.Receive(bt);

                        data += Encoding.ASCII.GetString(bt, 0, byteRes);

                        if(data.IndexOf("end")>0)
                        {
                            break;
                        }
                    }
                    Console.WriteLine("Revice"+data);

                    string answer = "Thank You";
                    byte[] msg = Encoding.ASCII.GetBytes(answer);
                    handle.Send(msg);
                    handle.Shutdown(SocketShutdown.Both);
                    handle.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

客户端:

 

 byte[] bytes = new byte[512];
            IPAddress ipHost = Dns.GetHostEntry(Dns.GetHostName()).AddressList.First(x => x.AddressFamily == AddressFamily.InterNetwork);
            IPEndPoint ipedp = new IPEndPoint(ipHost, 11000);

            Socket sockS = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            Console.WriteLine("Connet to Server");
            sockS.Connect(ipedp);

            string msg = "test socket connection snhabkdbkdislkd end";

            byte[] msgb = Encoding.ASCII.GetBytes(msg);
            int bytsend = sockS.Send(msgb);

            int bytRes = sockS.Receive(bytes);
            Console.WriteLine("server Asw:" + Encoding.ASCII.GetString(bytes, 0, bytRes));

 

posted @ 2016-03-25 15:29  坚硬的鸡蛋  阅读(107)  评论(0)    收藏  举报