当前位置: 首页 > news >正文

C# 使用Socket通信,新建WinForm服务端、客户端程序

一、新建WinForm Socket服务端程序

注:rtbReceviceMsg为RichTextBox控件

服务端程序、界面

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

服务端代码

public partial class Form1 : Form
{public Form1(){InitializeComponent();}public virtual void TriggerOnUpdateUI(string message){if (this.InvokeRequired){this.Invoke(new Action<string>(TriggerOnUpdateUI), message);}else{rtbReceviceMsg.Text += message + "\n";}}private void btnStartServer_Click(object sender, EventArgs e){TcpServer.StartListening(9999, this);btnStartServer.Enabled = false;}private void btnStopServer_Click(object sender, EventArgs e){TcpServer.StopListening();btnStartServer.Enabled = true;}
}public class TcpServer{public static Form1 _mainForm;private static TcpListener _listener;private static bool _isRunning;public static void StartListening(int port, Form1 form){_mainForm = form;_listener = new TcpListener(IPAddress.Loopback, port);_listener.Start();_isRunning=true;Console.WriteLine("Server listening on port " + port);Task.Run(() => ListenForClients());}public static void ListenForClients(){while (_isRunning){try{TcpClient client = _listener.AcceptTcpClient();Console.WriteLine("Client connected");HandleClient(client);}catch (SocketException){if (!_isRunning){break;}}}}private static void HandleClient(TcpClient client){NetworkStream stream = client.GetStream();byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0){string message = Encoding.ASCII.GetString(buffer, 0, bytesRead);Console.WriteLine("received" + message);stream.Write(buffer, 0, bytesRead);_mainForm.BeginInvoke(new Action(() => _mainForm.TriggerOnUpdateUI(message)));}}public static void StopListening(){_isRunning = false;_listener?.Stop();}}

二、新建WinForm Socket客户端程序

客户端程序、界面

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

客户端代码

public partial class Form1 : Form
{public Form1(){InitializeComponent();}public static void ConnectToServer(string hostname, int port){try{using (TcpClient tcpClient = new TcpClient(hostname, port)){Console.WriteLine("Connected to server");NetworkStream stream = tcpClient.GetStream();byte[] data = Encoding.ASCII.GetBytes($"Hellow,Server!{DateTime.Now.ToString()}");stream.Write(data, 0, data.Length);Console.WriteLine("Sent:Hellow,Server!");byte[] buffer = new byte[1024];int bytesRead = stream.Read(buffer, 0, buffer.Length);string response = Encoding.ASCII.GetString(buffer, 0, bytesRead);Console.WriteLine($"Response: {response}");}}catch (SocketException ex){MessageBox.Show($"连接异常:{ex.Message}");}}private void btnStartServer_Click(object sender, EventArgs e){ConnectToServer("127.0.0.1", 9999);}
}

服务端、客户端程序运行效果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用 Nmap 进行 SSL/TLS 加密套件枚举
  • Android 11(API 级别 30)及以上版本中,将Bitmap保存到设备上
  • FreeSWITCH event_socket 配置从其他地址连接
  • 使用CUBE_MX使用I2C通信,实现对EEPROM的读写
  • AI与自然语言处理(NLP):中秋诗词生成
  • OpenAI o1模型推理能力大幅提升的背后:重复采样如何提升AI推理能力
  • Clickhouse使用笔记
  • 了解 React 应用程序中的渲染和重新渲染:它们如何工作以及如何优化它们
  • 『功能项目』战士职业平A怪物掉血【44】
  • 动态规划---不同的子序列
  • 一次RPC调用过程是怎么样的?
  • NLP与文本生成:使用GPT模型构建自动写作系统
  • 软件无线电2:矢量信号器和HackRF实现FM调制解调
  • 32.递归、搜索、回溯之floodfill算法
  • com.microsoft.sqlserver:sqljdbc4:jar:4.0 was not found产生原因及解决步骤
  • [nginx文档翻译系列] 控制nginx
  • Java程序员幽默爆笑锦集
  • Koa2 之文件上传下载
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • vue-router的history模式发布配置
  • Web标准制定过程
  • 半理解系列--Promise的进化史
  • 当SetTimeout遇到了字符串
  • 反思总结然后整装待发
  • 后端_ThinkPHP5
  • 人脸识别最新开发经验demo
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 由插件封装引出的一丢丢思考
  • ​zookeeper集群配置与启动
  • #define,static,const,三种常量的区别
  • #Linux(权限管理)
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #ubuntu# #git# repository git config --global --add safe.directory
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (1)STL算法之遍历容器
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (转)大型网站架构演变和知识体系
  • .gitignore文件使用
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET CORE Aws S3 使用
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET Micro Framework初体验
  • .Net mvc总结
  • .NET WPF 抖动动画
  • .NET 使用配置文件
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET中统一的存储过程调用方法(收藏)
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • @ModelAttribute 注解
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例