C#的Socket案例

 

文章目录

  • 前言
  • 一、Socket是什么?
  • 二、使用步骤
    • 1.服务端
    • 2.客户端
  • 总结

 


C#的Socket使用教程

一、Socket是什么?

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,,是用于在两个基于TCP/IP协议的应用程序之间相互通信。其实呢,Socket就是把复杂的TCP/IP协议族隐藏在Socket接口后面。

二、使用步骤

1.服务端

      static  Socket Server = null;//服务端的socket
      Dictionary SocketList = new Dictionary();//保存客户的对象(这样就可以想发给谁就发给谁)
 try
            {
                string host = "127.0.0.1";//本机
                int port = "8866";//端口号
                IPAddress iPAddress = IPAddress.Parse(host);
                IPEndPoint iP = new IPEndPoint(iPAddress, port);
                Server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                Server.Bind(iP);//绑定IP地址:端口
                Server.Listen(10);//设定最多10个连接请求排队
                //建立线程监听client连接请求
                Thread t1 = new Thread(new ThreadStart(AcceptConncetion));
                t1.Start();
                Console.WriteLine("启动成功!"+ "监听:" + Server.LocalEndPoint.ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine("启动失败");
            }  
         /// 
        /// 监听客户端连接
        /// 
       public void AcceptConncetion()
        {
            Socket acceptSocket = null;
            while (true)
            {
                acceptSocket =  Server.Accept();//获取到客户端的
                SocketList.Add(acceptSocket.RemoteEndPoint.ToString(), acceptSocket);//添加客户端对象
                Console.WriteLine("连接数量"+SocketList.Count);
                //每接收到一个连接,启动新线程接收数据
                Thread t2 = new Thread(new ParameterizedThreadStart(GetData));
                t2.Start(acceptSocket);
            }
        } 
        /// 
        /// 获取客户端发送来的数据
        /// 
        /// 
       public void GetData(object clientSocket)
        {
            Socket socket = clientSocket as Socket;
            while (true)
            {
                byte[] bs = new byte[1024 * 1024];
                //接收数据
                socket.Receive(bs);
                string str = Encoding.UTF8.GetString(bs);
                this.Invoke(new Action(() =>
                {
                    richTextBox1.AppendText("\n"+str);
                }));
            }
        } 
        /// 
        ///给客户端发送信息
        /// 
        private void Send()
        {
                var sk = SocketList[0];//选择客户端的socket
                string sendData = "一起睡觉嘛";
                byte[] bs = Encoding.UTF8.GetBytes(sendData);
                sk.Send(bs);
        }

2.客户端

1.连接服务端代码并接收信息:
Socket Client = null;//客户端对象socket
            string host = "127.0.0.1";
            int port = 8866;
            IPAddress address = IPAddress.Parse(host);
            IPEndPoint iP = new IPEndPoint(address, port);
            Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            Client.Connect(iP);//连接服务端
            Thread t1 = new Thread(new ThreadStart(() =>
            {
                while (true)
                {
                    byte[] bs = new byte[1024 * 1024];
                    Client.Receive(bs);//接收信息
                    string str = Encoding.UTF8.GetString(bs);
                    this.richTextBox1.Invoke(new Action(() =>
                    {
                        richTextBox1.AppendText("\n"+str);
                    }));
                }
            }));
            t1.Start();

2.发送到客服端:    
 string sendData = "想一起睡呀";
            byte[] bs = Encoding.UTF8.GetBytes(sendData);
            Client.Send(bs);//发送信息

 

 

总结

  一个服务端,n个客户端连接。

学习与快乐并进,只愿当下的我还是还是个阳光开朗的有那么点帅气的小伙子哈哈哈

https://blog.csdn.net/qq_41187108/article/details/116204749

你可能感兴趣的:(c#,socket)