效果图

代码实现

用的变量:

1      Thread threadWatch = null; //负责监听客户端的线程
2         Socket socketWatch = null; //负责监听客户端的套接字
3         //创建一个负责和客户端通信的套接字
4         List<Socket> socConnections = new List<Socket>();
5         List<Thread> dictThread = new List<Thread>();

启动服务按钮代码如下:

 1 private void btnServerConn_Click(object sender, EventArgs e)
 2         {
 3             //定义一个套接字用于监听客户端发来的信息  包含3个参数(IP4寻址协议,流式连接,TCP协议)
 4             socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 5             //服务端发送信息 需要1个IP地址和端口号
 6             IPAddress ipaddress = IPAddress.Parse(txtIP.Text.Trim()); //获取文本框输入的IP地址
 7             //将IP地址和端口号绑定到网络节点endpoint上
 8             IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(txtPORT.Text.Trim())); //获取文本框上输入的端口号
 9             //监听绑定的网络节点
10             socketWatch.Bind(endpoint);
11             //将套接字的监听队列长度限制为20
12             socketWatch.Listen(20);
13             //创建一个监听线程
14             threadWatch = new Thread(WatchConnecting);
15             //将窗体线程设置为与后台同步
16             threadWatch.IsBackground = true;
17             //启动线程
18             threadWatch.Start();
19             //启动线程后 txtMsg文本框显示相应提示
20             txtMsg.AppendText("开始监听客户端传来的信息!" + "\r\n");
21
22         }

监听客户端消息代码如下:

 1      /// <summary>
 2         /// 监听客户端发来的请求
 3         /// </summary>
 4         private void WatchConnecting()
 5         {
 6             while (true)  //持续不断监听客户端发来的请求
 7             {
 8                 Socket socConnection = socketWatch.Accept();
 9                 txtMsg.AppendText("客户端连接成功" + "\r\n");
10                 //创建一个通信线程
11                 ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);
12                 Thread thr = new Thread(pts);
13                 thr.IsBackground = true;
14                 socConnections.Add(socConnection);
15                 //启动线程
16                 thr.Start(socConnection);
17                 dictThread.Add(thr);
18             }
19         }

将消息发送到客户端

 1      //发送信息到客户端
 2         private void btnSendMsg_Click(object sender, EventArgs e)
 3         {
 4             //调用 ServerSendMsg方法  发送信息到客户端
 5             ServerSendMsg(txtSendMsg.Text.Trim());
 6         }
 7
 8         /// <summary>
 9         /// 发送信息到客户端的方法
10         /// </summary>
11         /// <param name="sendMsg">发送的字符串信息</param>
12         private void ServerSendMsg(string sendMsg)
13         {
14             //将输入的字符串转换成 机器可以识别的字节数组
15             byte[] arrSendMsg = Encoding.UTF8.GetBytes(sendMsg);
16             //向客户端发送字节数组信息
17             foreach (Socket socConnection in socConnections)
18             {
19                 socConnection.Send(arrSendMsg);
20             }
21
22             //将发送的字符串信息附加到文本框txtMsg上
23             txtMsg.AppendText("So-flash:" + GetCurrentTime() + "\r\n" + sendMsg + "\r\n");
24             //}
25
26         }

转载于:https://www.cnblogs.com/zuoz/p/7121069.html

c# 使用TCP连接(server)相关推荐

  1. MobileIMSDK怎样修改Server端和安卓端TCP连接方式时报文的的限制大小

    场景 MobileIMSDK怎样修改服务端核心jar包的源码并替换掉Java服务端的jar包: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/de ...

  2. Linux TCP server系列(4)-浅谈listen与大并发TCP连接

    背景: 服务器在调用listen和accept后,就会阻塞在accept函数上,accpet函数返回后循环调用accept函数等待客户的TCP连接.如果这时候又大量的用户并发发起connect连接,那 ...

  3. TCP连接(client、server)状态转换

     客户端状态的变化: 客户端创建套接字之后会connect服务器,这时客户端会发送一个SYN到服务器,状态转换到SYN_SENT并等待服务器的回复,收到服务端的回复SYN+ACK(同一个报文)之后​​ ...

  4. 面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者 | 松若章 来源 | https://zhuanlan.zhihu.com/p/6142 ...

  5. 简单总结nodejs处理tcp连接的核心流程

    这篇文章主要介绍了nodejs处理tcp连接的核心流程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 前几天和一个小伙伴交流了一下nodejs中 ...

  6. 4个实验,彻底搞懂TCP连接的断开

    前言 看到这个标题你可能会说,TCP 连接的建立与断开,这个我熟,不就是三次握手与四次挥手吗?且慢,脑海中可以先尝试回答这几个问题: 四次挥手是谁发起的? 如果断电/断网了连接会断开吗? 什么情况下没 ...

  7. 漫画 | 理解了TCP连接的实现以后,客户端的并发也爆发了!

    echo "5000 65000" > /proc/sys/net/ipv4/ip_local_port_range 连接1:192.168.1.101 5000 192.1 ...

  8. 疯了疯了!面试官问一个 TCP 连接可以发多少个 HTTP 请求?

    一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来.但是你有没有想过,收到的 HTML 如果包含几十个图片标签,这 ...

  9. 【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇

    1. 查看系统网络配置和当前TCP状态         在定位并处理应用程序出现的网络问题时,了解系统默认网络配置是非常必要的.以x86_64平台Linux kernelversion 2.6.9的机 ...

  10. 几种TCP连接中出现RST的情况

    UNIX网络编程上说:产生RST的三个条件是:目的地为某端口的SYN到达,然而在该端口上并没有正在监听 的服务器:TCP想取消一个已有链接:TCP接收到一个根本不存在的连接上的分节. 几种TCP连接中 ...

最新文章

  1. 采用SpringBoot、MyBatis-Plus 、Security框架,开发的一套权限系统,实现前后端分离,完善的代码生成机制
  2. 玩电子游戏的神经网络,告诉我们大脑是如何决策的
  3. SSAS系列——【03】多维数据(多维数据集对象)
  4. Marketing Cloud launchpad中的meta标签
  5. ajax提示弹出dev,windows git pull或者push代码时弹出安全框解决办法
  6. Pytorch——torch.Tensor.data操作的含义
  7. 科技部部长:院士头衔不是学术不端挡箭牌!已有多位院士、校长等被“拿下”...
  8. 激光雷达的KPI与技术方案
  9. 苹果8参数配置_苹果MacBook Air/MacBook Pro/Mac mini参数配置详细介绍_智能硬件
  10. Selenium与phantomjs安装与环境配置,以及易班网站模拟登陆操作
  11. cloudstack vpc network egress-ingress rules
  12. java模拟手机浏览web_在PC上测试移动端网站和模拟手机浏览器的5大方法
  13. java jdk12_JDK 12:Java 12中的新功能
  14. 汽车天线系统结构、原理及应用指南
  15. Fortran:数组函数详解
  16. I am a lazy bone
  17. 经典例题:十六进制转换十进制详解 适合初学者
  18. china.js实现中国地图
  19. 进程间的几种通信方式的比较和线程间的几种通信方式
  20. 电巢:上海半导体投资浪潮的前奏、高潮与转折

热门文章

  1. Android平滑图片加载和缓存库Glide使用详解
  2. 实现SSH密钥登陆Linux系统的方法(Linux公私钥生成)
  3. linux中mtools工具_Linux mtools命令
  4. python中utf-8是什么意思_python中Unicode和UTF-8的区别
  5. java线程通信概念_java基础线程总结(线程概念、线程创建方式、线程间通信、线程重要方法)...
  6. 一周一论文(翻译)——[PVLDB 17] Dhalion: 基于Heron自适应调整的流处理系统
  7. 使用ASP.NET 2.0提供的WebResource管理资源
  8. Maven整合SSM测试
  9. Zabbix JMX之tomcat监控
  10. css技巧之如何实现ul li边框重合