基本信息
源码名称:tcp通信服务器
源码大小:0.71M
文件格式:.7z
开发语言:C#
更新时间:2021-11-01
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559

本次赞助数额为: 2 元 
   源码介绍

tcp通信服务器实现


        Socket socketSend;
        //存放客户端的ip port和对应的socket
        Dictionary<string, Socket> dicSocket = new Dictionary<string, Socket>();
        /// <summary>
        /// 等待客户端的连接,并且创建与之通信的Socket
        /// </summary>
        void Listen(object o)
        {
            //线程中的参数只能是object
            Socket socketWatch = o as Socket;
            while (true)
            {
                try
                {
                    //等待连接,连接成功返回一个用于数据收发得socket,while循环可以让不同得客户端连接
                    socketSend = socketWatch.Accept();
                    //将远程客户端的ip port和对应的socket存放到键值对中
                    dicSocket.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
                    //将远程客户端的ip port和对应的socket存放到下拉菜单供选择
                    comboBoxUser.Items.Add(socketSend.RemoteEndPoint.ToString());
                    //连接成功后,返回每一个客户端的 IP和port
                    ShowMsg(socketSend.RemoteEndPoint.ToString() ":" " 连接成功" "\r\n");
                    //开启新线程不停的接收客户端发来的消息
                    Thread th = new Thread(DataReceive);
                    th.IsBackground = true;
                    th.Start(socketSend);
                }
                catch (SocketException e)
                {
                    ShowMsg(e.ToString());
                    break;
                }
            }
        }

        void DataReceive(object o)
        {
            Socket socketSend = o as Socket;
            //不停得接收消息
            while (true)
            {
                try
                {
                    //定义接收缓存
                    byte[] bufferReceive = new byte[1024 * 1024 * 2];
                    //接收的字节数,当客户端下线时,receiveNumber=0
                    int receiveNumber = socketSend.Receive(bufferReceive);

                    //判断客户端是否下线,防止客户端下线时,服务端一直接收空消息
                    if (receiveNumber == 0)
                    {
                        break;
                    }
                    //字节转换成字符串
                    string str = Encoding.UTF8.GetString(bufferReceive, 0, receiveNumber);
                    //打印到窗体
                    ShowMsg(socketSend.RemoteEndPoint ": " str);
                }
                catch (SocketException e)
                {
                    ShowMsg(e.ToString());
                    break;
                }
            }
        }