返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C# Socket通信的实现(同时监听多客户端)
  • 632
分享到

C# Socket通信的实现(同时监听多客户端)

2024-04-02 19:04:59 632人浏览 独家记忆
摘要

看代码~ //创建Socket对象 //第一个参数:设置网络寻址的协议、第二参数设置数据传输的方式、第三个参数设置通信协议 So

看代码~


 //创建Socket对象
            //第一个参数:设置网络寻址的协议、第二参数设置数据传输的方式、第三个参数设置通信协议
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.tcp);
            //2.绑定IP端口
            string str = "127.0.0.1";
            int ports = 55555;
            IPAddress ip = IPAddress.Parse(str);
            IPEndPoint ipENdpoint = new IPEndPoint(ip, ports);
 
            serverSocket.Bind(ipENdpoint);
            //3.开启监听
            serverSocket.Listen(10);
            label5_Timer.Text = "开始监听···";
 
            //4.开始接受客户端的链接
            ThreadPool.QueueUserWorkItem(new WaitCallback(this.StartAcceptClient), serverSocket); 
        }
        public void StartAcceptClient(object state)
        {
            var serverSocket = (Socket)state;
            this.AppendTextLog("服务器开始接受客户端的链接");
            while (true)
            {
                try
                {
                    Socket prosock = serverSocket.Accept();
                    //将远程链接的客户端的IP地址和socket存入集合中
                    dicSocket.Add(prosock.RemoteEndPoint.ToString(), prosock);
                    string ipPort = prosock.RemoteEndPoint.ToString();
                    MedicineDevice ns = new MedicineDevice();
                    sqlMachine j = new SQLMachine();                   
 
                    j.MedicineDeviceStatus(ipPort, "在线");
                    //链接对象的信息
                    string stinfo = prosock.RemoteEndPoint.ToString();
                    this.AppendTextLog(string.FORMat("客户端{0}链接上了", stinfo));
 
                    ClientProSocketList.Add(prosock);
                    //服务器接收客户端的消息
                    ThreadPool.QueueUserWorkItem(new WaitCallback(this.ReceiveData), prosock);
                }
                catch (Exception e)
                {
                    return;
                    //throw;
                } 
            }

 public void ReceiveData(object obj)
        {
            var prosock = (Socket)obj;
            byte[] data = new byte[1024 * 1024];
            //方法返回代表实际接受的数据的长度
            while (true)
            {
                int realen = 0;
                try
                {
                    realen = prosock.Receive(data, 0, data.Length, SocketFlags.None);
                }
                catch (Exception e)
                {
                    //异常退出
                    AppendTextLog(string.Format("设备 {0} 异常退出", prosock.RemoteEndPoint.ToString()));                  
                    StopCOnnecte(prosock);
                    return;
                }
                if (realen <= 0)
                {
                    //对方正常退出
 
                    AppendTextLog(string.Format("设备 {0} 正常退出:", prosock.RemoteEndPoint.ToString()));             
                    }
                    prosock.Shutdown(SocketShutdown.Both);
                    prosock.Close();
                    ClientProSocketList.Remove(prosock);
                    return;
                }
                //接受到的数据
                string fromClientMsg = Encoding.Default.GetString(data, 0, realen);
                AppendTextLog(string.Format("接收到 {0} 的消息是:{1}", prosock.RemoteEndPoint.ToString(), fromClientMsg));}}
  private void StopCOnnecte(Socket prosock)
        {
            try
            {
                if (prosock.Connected)
                {
                    prosock.Shutdown(SocketShutdown.Both);
                    prosock.Close(100);
                }
            }
            catch (Exception ex)
            { 
            }
        }
 public void AppendTextLog(string txt)
        {
            if (textBox_Message.InvokeRequired)
            {
                textBox_Message.BeginInvoke(new Action<string>(s =>
                {
                    this.textBox_Message.Text = string.Format("{0}\r\n{1}", s, textBox_Message.Text);
                }
                    ), txt);
                //同步方法
                //textBox_Message.Invoke(new Action<string>(s =>
                //    {
                //        this.textBox_Message.Text = string.Format("{0}\r\n{1}", s, textBox_Message.Text);
                //    }
                //    ), txt);
            }
            else
            {
                this.textBox_Message.Text = string.Format("{0}\r\n{1}", txt, textBox_Message.Text);
            }
        }
//在粘贴代码时可能有漏'{'或'}'

补充:C# Socket的Listen监听方法

看代码~


 _serverSocket.Listen(10);
  public void Listen(int backlog);

Listen方法的整型参数表示的是:排队等待连接的最大数量,注意这个数量不包含已经连接的数量

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

--结束END--

本文标题: C# Socket通信的实现(同时监听多客户端)

本文链接: https://lsjlt.com/news/123739.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C# Socket通信的实现(同时监听多客户端)
    看代码~ //创建socket对象 //第一个参数:设置网络寻址的协议、第二参数设置数据传输的方式、第三个参数设置通信协议 So...
    99+
    2024-04-02
  • C++多线程实现TCP服务器端同时和多个客户端通信
    通讯建立后首先由服务器端发送消息,客户端接收消息;接着客户端发送消息,服务器端接收消息,实现交互发送消息。 服务器同时可以和多个客户端建立连接,进行交互; 在某次交互中,服务器端...
    99+
    2024-04-02
  • AndroidSocket实现多个客户端即时通信聊天
    聊天室的原理是这样的,一个客户端与服务器建立通讯成功,即客户端socket连接到服务器的ServerSocket之后,服务器端程序将对应的socket加入到容器中,为每一个socke...
    99+
    2024-04-02
  • 客户端Socket与服务端ServerSocket串联实现网络通信
    目录引导语1、类属性2、初始化3、bind4、accept5、面试题5.1、说说你对Socket和ServerSocket的理解?5.2、说说对SocketOptions中的SO_T...
    99+
    2024-04-02
  • Java 中怎么实现多客户端通信
    今天就跟大家聊聊有关Java 中怎么实现多客户端通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。来看服务端的代码:import java.net.*; &nbs...
    99+
    2023-06-17
  • Java Socket通讯如何进行客户端的信息通信
    本篇文章为大家展示了Java Socket通讯如何进行客户端的信息通信,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java Socket通讯在实际的使用中有很多关键代码需要我们学习,那么首先我们就...
    99+
    2023-06-17
  • python服务器与android客户端socket通信实例
    本文实例讲述了python服务器与android客户端socket通信的方法。分享给大家供大家参考。具体实现方法如下: 首先,服务器端使用python完成,下面为python代...
    99+
    2022-06-06
    socket通信 Python socket Android
  • 客户端Socket与服务端ServerSocket串联实现网络通信的方法
    本文小编为大家详细介绍“客户端Socket与服务端ServerSocket串联实现网络通信的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“客户端Socket与服务端ServerSocket串联实现网络通信的方法”文章能帮助大家解决疑惑...
    99+
    2023-06-29
  • C#中怎么实现服务端与客户端通信
    C#中怎么实现服务端与客户端通信,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C#服务端与客户端通信实现实例:TcpClient client;&nb...
    99+
    2023-06-17
  • C#中如何实现服务端与客户端通信
    这篇文章将为大家详细讲解有关C#中如何实现服务端与客户端通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#服务端与客户端通信实现实例:class Server {&n...
    99+
    2023-06-17
  • python利用socket实现客户端和服务端之间进行通信
    目录一、socketsocket通信的条件:IP和端口形象比喻二、客户端实现过程三、服务器实现过程四、演示五、实现持续通信过程前言: 今天教大家通过Python进行Socket网络编...
    99+
    2024-04-02
  • C#实现Socket服务器及多客户端连接的方式
    服务端代码[控制台示例] static List<Socket> Sockets = new List<Socket>(); static v...
    99+
    2024-04-02
  • nodejs中如何实现socket服务端和客户端简单通信功能
    小编给大家分享一下nodejs中如何实现socket服务端和客户端简单通信功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!本文实例讲述了通过node.js的net模块实现nodejs s...
    99+
    2024-04-02
  • Socket结合线程池使用实现客户端和服务端通信demo
    目录引导语1、要求2、客户端代码3、服务端代码3.1、对客户端请求进行控制3.2、服务端任务的处理逻辑4、测试5、总结引导语 Socket 面试最终题一般都是让你写一个简单的客户端和...
    99+
    2024-04-02
  • Socket结合线程池怎么实现客户端和服务端通信demo
    本篇内容主要讲解“Socket结合线程池怎么实现客户端和服务端通信demo”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Socket结合线程池怎么实现客户端和服务端通信demo”吧!1、要求可以...
    99+
    2023-06-29
  • Java中怎么实现一个Socket通讯客户端
    Java中怎么实现一个Socket通讯客户端,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java Socket通讯代码 <xml version="...
    99+
    2023-06-17
  • python中如何实现客户端通信
    这篇文章将为大家详细讲解有关python中如何实现客户端通信,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、实现流程创建一套接字。用connect()函数连接到服务器。使用sendall()向服务器发送...
    99+
    2023-06-15
  • vue中同时监听多个参数的实现
    目录如何同时监听多个参数data中定义一个对象完整代码vue事件监听,条件判断事件监听 v-on条件判断如何同时监听多个参数 vue使用watch同时监听多个参数,其中有任意一个参数...
    99+
    2024-04-02
  • Java编程Socket如何实现多个客户端连接同一个服务端
    这篇文章主要介绍Java编程Socket如何实现多个客户端连接同一个服务端,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java Socket(套接字)通常也称作"套接字",用于描述IP地址和端口...
    99+
    2023-05-30
    java socket
  • TCP实现服务器和客户端通信
    目录 TCP介绍 代码实现 server(服务器端) 代码分析 client(客户端) 代码分析 结果展示 TCP介绍 TCP (Transmission Control Protocol) 是一种面向连接的协议,用于在计算机网络中传...
    99+
    2023-09-06
    tcp/ip 服务器 网络
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作