Socket

作者: 祝你万事顺利 | 来源:发表于2019-05-20 13:44 被阅读0次

    网络通信三要素:

    IP地址、端口号、传输协议
    TCP、UDP协议

    Socket通信流程:

    Server
    1.创建socket

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

    2.绑定socket和端口号

                    //创建一个IP对象
                    IPAddress iPAddress = IPAddress.Parse(ip);
                    //创建网络端口
                    IPEndPoint iPEndPoint = new IPEndPoint(iPAddress, port);
                    //绑定端口到socket
                    msocket.Bind(iPEndPoint);
    

    3.监听该端口号

                    //设置最大监听数量
                    msocket.Listen(int.MaxValue);
                    Console.WriteLine("监听{0}",msocket.LocalEndPoint);
    

    4.监听客户端的链接

                    //监听客户端的链接
                    Thread thread = new Thread(MthreadStart);
                    thread.Start();
    
            //监听客户端连接
            private void MthreadStart()
            {
                try
                {
                    Socket client = msocket.Accept();
                    client.Send(Encoding.UTF8.GetBytes("Welcome"));
                    //接受客户端数据
                    Thread thread = new Thread(ReceiveMessage);
                }
                catch (Exception)
                {
    
                    throw;
                }
            }
    

    5.接收客户端的信息

    private void ReceiveMessage(Object socket)
            {
                //Socket clientSocket = socket as Socket;
                Socket clientSocket = (Socket)socket;
                while (true)
                {
                    try
                    {
                        int len = clientSocket.Receive(buffer);
                        Console.WriteLine("接收{0}客户端消息{1}",clientSocket.RemoteEndPoint, Encoding.UTF8.GetString(buffer,0,len));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        clientSocket.Shutdown(SocketShutdown.Both);
                        clientSocket.Close();
                        throw;
                    }
                }
            }
    

    Client

    class SocketClient
        {
            private string ip = string.Empty;
            private int port = 0;
            private byte[] buffer = new byte[1024*1024];
            private Socket socket;
    
            public SocketClient(string ip,int port)
            {
                this.ip = ip;
                this.port = port;
            }
            public void StartClient()
            {
                try
                {
                    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    IPAddress iPAddress = IPAddress.Parse(ip);
                    IPEndPoint iPEndPoint = new IPEndPoint(iPAddress, port);
                    socket.Connect(iPEndPoint);
                    Console.WriteLine("Connect To Server{0}", ip);
                    int len = socket.Receive(buffer);
                    Console.WriteLine("接收{0}客户端消息{1}", socket.RemoteEndPoint, Encoding.UTF8.GetString(buffer, 0, len));
                    for (int i = 0; i < 20; i++)
                    {
                        Thread.Sleep(2000);
                        string message = string.Format("Client Send message,time{0}", DateTime.Now);
                        socket.Send(Encoding.UTF8.GetBytes(message));
                        Console.WriteLine("!!!!!!!!!!!!向服务器发送{0}", message);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    socket.Shutdown(SocketShutdown.Both);
                    socket.Close();
                    throw;
                }
                Console.WriteLine("消息发送结束");
            }
        }
    

    相关文章

      网友评论

          本文标题:Socket

          本文链接:https://www.haomeiwen.com/subject/sjiwoqtx.html