前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#-多线程和Socket网络编程-全网最细模拟服务器和客户端通信

C#-多线程和Socket网络编程-全网最细模拟服务器和客户端通信

作者头像
用户9857551
发布2022-06-28 08:49:35
9130
发布2022-06-28 08:49:35
举报
文章被收录于专栏:Angular学习规划

模拟服务器和客户端通信

😍全网最细-保姆级教程😍那就不多说了开始✨

  1. 创建一个负责监听的Socket
  2. 创建IP地址和端口号对象
  3. 让负责监听的socket绑定IP地址和端口号
  4. 设置监听队列 就是在某一时间点能够连入客户端最大的数量 到达这个限度就要排队了
  5. 负责监听的socket 来接受客户端的连接 创建和客户端通信的Socket

难点在于:

负责监听的socket 来接受客户端的连接 创建和客户端通信的Socket 但是一个语句只能建立一次链接 并且他是主线程在执行 一旦执行起来没人连窗口就会假死 所以说我们得把后边这一句话开新线程 并放到一个循环里 Socket socketSend = socketWatch.Accept(); 在循环里还有一个难题: 在方法找不到socketWatch 我们需要把他当作一个参数传进来 但是我们要开辟新线程 被线程执行的函数 如果要传参就必须传Object类型的参数 我们可以传完参数我们再把它强转回来就可以了

展示成果图片:

在这里插入图片描述
在这里插入图片描述

源码展示:

代码语言:javascript
复制
private void button1_Click(object sender, EventArgs e)
        {
            //创建一个负责监听的Socket
            Socket socketWatch = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            //创建IP地址和端口号对象
            IPAddress ip = IPAddress.Any;
            IPEndPoint point = new IPEndPoint(ip,Convert.ToInt32(txtPort.Text));
            //让负责监听的socket绑定IP地址和端口号
            socketWatch.Bind(point);
            ShowMsg("监听成功");

            //设置监听队列   就是在某一时间点能够连入客户端最大的数量 到达这个限度就要排队了
            socketWatch.Listen(10);
            //负责监听的socket  来接受客户端的连接 创建和客户端通信的Socket
            //但是一个语句只能建立一次链接 并且他是主线程在执行 一旦执行起来没人连窗口就会假死
            //所以说我们得把后边这一句话开新线程 并放到一个循环里  Socket socketSend = socketWatch.Accept();

            Thread th = new Thread(Listen);
            th.IsBackground = true;
            th.Start(socketWatch);
        }
        /// <summary>
        /// 等待客户端的连接 并且创建与之通信的socket
        /// </summary>
        void Listen(object o) {
            //负责监听的socket  来接受客户端的连接 创建和客户端通信的Socket 
            //但是在方法找不到socketWatch   把他当作一个参数传进来
            //但是我们要开辟新线程 被线程执行的函数 如果要传参就必须传Object类型的参数
            //传完参数我们再把它强转回来就可以了
            Socket socketWatch = o as Socket;
            //as  类型转换 转换成功返回对象 转换不成功一个null
            while (true)
            {
                Socket socketSend = socketWatch.Accept();
                ShowMsg(socketSend.RemoteEndPoint.ToString() + "链接成功");
            }
        }
        void ShowMsg(string str) {
            txtLog.AppendText(str+"\r\n");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
        }

如果有写的不好的地方还请大家指正。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模拟服务器和客户端通信
    • 难点在于:
      • 展示成果图片:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档