C#Socket编程多客户端基于同一服务端通信

对于Socket编程,网上资料、博文一抓一大把,不过大多数都是简单讲解单客户端和服务端通信的实例,这里主要给大家展现一下在.net平台上用窗体程序实现的过程,不过比较有特点的是会告诉大家如何实现不同客户端之间的通信,它们如何通过一个服务端准确的找到对方进行通信,包括上线提醒、私信交流、昵称重名处理等功能。
一.服务端架构
1.开启监听
简单来说,服务端首先要创建一个监听线程,检测客户端的连接情况,这个部分的程序封装在一个按钮里。主要实现代码如下:

        Thread threadwatch = null;//负责监听客户端的线程       
        //创建一个监听线程
          threadwatch = new Thread(watchconnecting);
       //将窗体线程设置为与后台同步,随着主线程结束而结束
          threadwatch.IsBackground = true;
      //启动线程   
           threadwatch.Start();

如果有仔细看我上面给出的代码细心的观众会发现有个watchconnecting()方法被委托进了监听线程,其实这就是一个监听客户端信息消息的函数,很老套的过程:

            Socket connection = null;
            while (true)  //持续不断监听客户端发来的请求   
            {
                try
                {
                    connection = socketwatch.Accept();

                }

其中

Socket socketwatch = null;//负责监听客户端的套接字

也只是大家异常熟悉的Socket套接字,这部分绑定IP和端口到Point,然后

//监听绑定的网络节点
            socketwatch.Bind(point);
            //将套接字的监听队列长度限制为20
            socketwatch.Listen(20);

的过程应该在前面服务端开启监听线程的按钮里实现,这里就不细说了。
然后创建一个通信线程,对服务端和客户端之间的交流进行一个完善:

//创建一个通信线程    
                ParameterizedThreadStart pts = new ParameterizedThreadStart(recv);
                Thread thread = new Thread(pts);
                thread.IsBackground = true;//设置为后台线程,随着主线程退出而退出   
                //启动线程   
                thread.Start(connection);

2.服务端通信过程
由之前代码里创建的通信线程里委托的recv()方法,看字面意思也知道是接收客户端发送消息的接收函数。也是很常规的部分:

            Socket socketServer = socketclientpara as Socket;
            while (true)
            {

                //创建一个内存缓冲区 其大小为1024*1024字节  即1M   
                byte[] arrServerRecMsg = new byte[1024 * 1024];
                //将接收到的信息存入到内存缓冲区,并返回其字节数组的长度  
                try
                {
                    int length = socketServer.Receive(arrServerRecMsg);
                
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值