C#的Socket案例

本文详细介绍了如何使用C#进行Socket通信,包括服务端的设置、监听客户端连接、接收和发送数据,以及客户端的连接、接收信息和发送数据的步骤。通过示例代码展示了如何建立一个服务端并处理多个客户端连接,以及客户端如何连接服务端并进行数据交换。
摘要由CSDN通过智能技术生成

 

 


C#的Socket使用教程

一、Socket是什么?

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

二、使用步骤

1.服务端

      static  Socket Server = null;//服务端的socket
      Dictionary<string,Socket> SocketList = new Dictionary<string, Socket>();//保存客户的对象(这样就可以想发给谁就发给谁)
 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("启动失败");
            }  
         /// <summary>
        /// 监听客户端连接
        /// </summary>
       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);
            }
        } 
        /// <summary>
        /// 获取客户端发送来的数据
        /// </summary>
        /// <param name="clientSocket"></param>
       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);
                }));
            }
        } 
        /// <summary>
        ///给客户端发送信息
        /// </summary>
        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

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值