问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c#客户端服务端通信问题

发布网友 发布时间:2024-05-14 03:05

我来回答

1个回答

热心网友 时间:2024-06-03 14:38

这个可以满足你的要求 简单的服务器客户端 通信 下面是部分代码  详细的下载附件

 //声明将要用到的类
        private IPEndPoint ServerInfo;//存放服务器的IP和端口信息
        private Socket ServerSocket;//服务端运行的SOCKET
        private Thread ServerThread;//服务端运行的线程
        private Socket[] ClientSocket;//为客户端建立的SOCKET连接
        private int ClientNumb;//存放客户端数量
        private byte[] MsgBuffer;//存放消息数据

        private void CmdStar_Click(object sender, EventArgs e)
        {
            ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //提供一个 IP 地址,指示服务器应侦听所有网络接口上的客户端活动
            IPAddress ip = IPAddress.Any;
            ServerInfo = new IPEndPoint(ip, this.GetPort());
            ServerSocket.Bind(ServerInfo);//将SOCKET接口和IP端口绑定
            ServerSocket.Listen(10);//开始监听,并且挂起数为10

            ClientSocket = new Socket[65535];//为客户端提供连接个数
            MsgBuffer = new byte[65535];//消息数据大小
            ClientNumb = 0;//数量从0开始统计

            ServerThread = new Thread(new ThreadStart(RecieveAccept));//将接受客户端连接的方法委托给线程
            ServerThread.Start();//线程开始运行

            CheckForIllegalCrossThreadCalls = false;//不捕获对错误线程的调用

            this.CmdStar.Enabled = false;
            this.CmdStop.Enabled = true;
            this.StateMsg.Text = "服务正在运行..." + " 运行端口:" + this.GetPort().ToString();
            this.ClientList.Items.Add("服务于 " + DateTime.Now.ToString() + " 开始运行.");
        }

        //接受客户端连接的方法
        private void RecieveAccept()
        {
            while (true)
            {
                //Accept 以同步方式从侦听套接字的连接请求队列中提取第一个挂起的连接请求,然后创建并返回新的 Socket。
                //在阻止模式中,Accept 将一直处于阻止状态,直到传入的连接尝试排入队列。连接被接受后,原来的 Socket 继续将传入的连接请求排入队列,直到您关闭它。
                ClientSocket[ClientNumb] = ServerSocket.Accept();
                ClientSocket[ClientNumb].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None,
                    new AsyncCallback(RecieveCallBack), ClientSocket[ClientNumb]);
                lock (this.ClientList)
                {
                    this.ClientList.Items.Add(ClientSocket[ClientNumb].RemoteEndPoint.ToString() + " 成功连接服务器.");
                }
                ClientNumb++;
            }
        }

        //回发数据给客户端
        private void RecieveCallBack(IAsyncResult AR)
        {
            try
            {
                Socket RSocket = (Socket)AR.AsyncState;
                int REnd = RSocket.EndReceive(AR);
                //对每一个侦听的客户端端口信息进行接收和回发
                for (int i = 0; i < ClientNumb; i++)
                {
                    if (ClientSocket[i].Connected)
                    {
                        //回发数据到客户端
                        ClientSocket[i].Send(MsgBuffer, 0, REnd, SocketFlags.None);
                    }
                    //同时接收客户端回发的数据,用于回发
                    RSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(RecieveCallBack), RSocket);
                }
            }
            catch { }

        }


热心网友 时间:2024-06-20 17:35

这个可以满足你的要求 简单的服务器客户端 通信 下面是部分代码  详细的下载附件

 //声明将要用到的类
        private IPEndPoint ServerInfo;//存放服务器的IP和端口信息
        private Socket ServerSocket;//服务端运行的SOCKET
        private Thread ServerThread;//服务端运行的线程
        private Socket[] ClientSocket;//为客户端建立的SOCKET连接
        private int ClientNumb;//存放客户端数量
        private byte[] MsgBuffer;//存放消息数据

        private void CmdStar_Click(object sender, EventArgs e)
        {
            ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //提供一个 IP 地址,指示服务器应侦听所有网络接口上的客户端活动
            IPAddress ip = IPAddress.Any;
            ServerInfo = new IPEndPoint(ip, this.GetPort());
            ServerSocket.Bind(ServerInfo);//将SOCKET接口和IP端口绑定
            ServerSocket.Listen(10);//开始监听,并且挂起数为10

            ClientSocket = new Socket[65535];//为客户端提供连接个数
            MsgBuffer = new byte[65535];//消息数据大小
            ClientNumb = 0;//数量从0开始统计

            ServerThread = new Thread(new ThreadStart(RecieveAccept));//将接受客户端连接的方法委托给线程
            ServerThread.Start();//线程开始运行

            CheckForIllegalCrossThreadCalls = false;//不捕获对错误线程的调用

            this.CmdStar.Enabled = false;
            this.CmdStop.Enabled = true;
            this.StateMsg.Text = "服务正在运行..." + " 运行端口:" + this.GetPort().ToString();
            this.ClientList.Items.Add("服务于 " + DateTime.Now.ToString() + " 开始运行.");
        }

        //接受客户端连接的方法
        private void RecieveAccept()
        {
            while (true)
            {
                //Accept 以同步方式从侦听套接字的连接请求队列中提取第一个挂起的连接请求,然后创建并返回新的 Socket。
                //在阻止模式中,Accept 将一直处于阻止状态,直到传入的连接尝试排入队列。连接被接受后,原来的 Socket 继续将传入的连接请求排入队列,直到您关闭它。
                ClientSocket[ClientNumb] = ServerSocket.Accept();
                ClientSocket[ClientNumb].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None,
                    new AsyncCallback(RecieveCallBack), ClientSocket[ClientNumb]);
                lock (this.ClientList)
                {
                    this.ClientList.Items.Add(ClientSocket[ClientNumb].RemoteEndPoint.ToString() + " 成功连接服务器.");
                }
                ClientNumb++;
            }
        }

        //回发数据给客户端
        private void RecieveCallBack(IAsyncResult AR)
        {
            try
            {
                Socket RSocket = (Socket)AR.AsyncState;
                int REnd = RSocket.EndReceive(AR);
                //对每一个侦听的客户端端口信息进行接收和回发
                for (int i = 0; i < ClientNumb; i++)
                {
                    if (ClientSocket[i].Connected)
                    {
                        //回发数据到客户端
                        ClientSocket[i].Send(MsgBuffer, 0, REnd, SocketFlags.None);
                    }
                    //同时接收客户端回发的数据,用于回发
                    RSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(RecieveCallBack), RSocket);
                }
            }
            catch { }

        }


声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
浙江温岭市100元航天纪念币在中国银行什么时候发行 25年生肖纪念币预约时间表 有机铁观音春茶多少钱一斤 好听的管理公司名字 好听的企业管理类公司名称 狂犬病恐水是怎么回事 狂犬病为什叫恐水症?发病后死亡率是99.99%还是100%?还有这些不为人知的... 一般的大专会计毕业论文要求多少字? 求往年的会计毕业论文 字数4000-10000左右 越多越好 动车的学生票能在自动取票机上取吗 六安瓜片泡多长时间 ...撒娇的还一口一口的叫着妈妈,一边还亲妈妈的脸,这个宝宝是不是太... 我血压91-53,女,24岁身高164体重130,平时会感觉到头晕是什么原因... 大米花生红枣百合一起煮粥怎么样 如何在忘记开机密码时重置或清除Windows 7电脑的密码? 启动管理器中只有PE系统怎么解决? ...爆炸头卷发女孩头上有个 蝴蝶结的 卡通人物叫什么名字~ 云南一般适合几月份去 五月份去云南旅游合适吗 win10屏幕亮度调节没了 教师使用外部动机控制幼儿的风险有哪些 外部学习动机的解释? 下列选项中属于外部学习动机的是( )。 下列学习动机中,属于外部动机的有()。 ...指的是 电生磁还是磁生电?电流对磁场的的作用力呢? 小华骑一辆车轮半径为28厘米的自行车,车轮每分钟转150圈,她1分钟可以... 一辆二八自行车,车轮半径是28厘米,小明骑车每分钟转动120周,小明每... 中风化片麻岩能用灌注桩吗 广联达装饰计量2019怎么识别异形隔墙? 我的腰两边的肌肉不一样大,大的那边酸疼贴膏药就好的怎么回事 去巴厘岛体验浮潜需要准备哪些装备? 如何实现客户端持久化链接 我感冒了,是热伤风 鼻子堵了 各位大神有什么方法治一下吗???谢谢_百度... 我用八寸潜水泵抽水但是河里水位不稳定要经常把水泵移动 (鱼塘用水泵... 为什么我的桌面图标(比如谷歌浏览器和宽带连接)有一部分会变成这样?多... 怎样把手机抖音里的视频下载到u盘里 地奥司明片吃多久才能显示效果 多少天一个疗程 跨省存钱对个人和社会有哪些好处? 亚运会作文结尾怎么写 高考报名系统上有没有第三方监护人 南京4.20演唱会王心凌 hd版本app是什么意思(App上说hd版是什么) 红楼梦多少钱 红楼梦现在值多少??? 使用假户口有什么后果 上假户口是什么罪 燃气电池没电了 必须用燃气公司的么 六尺之孤什么意思?出处是哪里? "可托六尺之孤,可寄百里之命,临大节而不可夺也"是什么意思? 如何在WPS中制作书签目录? WPS文档的目录怎么自动生成书签?