.NET修仙传
修炼秘籍
.net 修炼路线图
书籍大全
C#入门后该如何进阶?如何提升自己?
读写 Excel 四种方案
书籍大全
dotnet命令大全
C# 程序集加载方法
linux 下部署.net环境
.NET WebAPI中FromRoute、FromQuery、FromBody的关键角色与用法
C# 新用法
盘点C#最有价值的10个语法糖
C#基础语法与数据类型
序列化
C# 7.0
模式匹配Pattern Matching
优秀实用的类库推荐
2024年C#优秀实用的类库推荐
依赖注入与中间件
依赖注入
查询所有已注入的服务
WebApi实现批量注入
原生依赖注入
自动依赖注入框架
优秀中间件
依赖注入
Autofac
生命周期
文档操作
PDF操作
PDF合并及生成书签目录
Excel操作
几个Excel文件合并去重分类
Excel文件之COM组件方式
操作Excel文件之NPOI
INI文件
面试宝典
WebService、WCF、WebAPI、一般处理程序
C# 线程和进程的区别
asp.net core 服务生命周期
asp.net core 的中间件都有哪些
操作系统编程
获取搜狗输入法中英文
com组件集成
执行系统命令
通过句柄嵌入exe窗体程序
windows-开机自启动
程序调用cmd命令生成WCF服务的客户端调用文件
获取电脑信息
键盘记录器
键盘改键功能
监听鼠标操作
框架揭秘
01编程初体验
中间件 Middleware
路由
配置管理
配置系统
配置管理
日志管理
Log4Net
NLog
.net core原始日志记录
日志管理
Serilog
LINQ
LINQ概讲
LINQ编程
常用方法
ORM
EF Core初始化
EF Core的实体类配置
执行原生SQL语句
EF Core
操作sqlite
操作Mysql数据库
操作LiteDB
AutoMapper高效实现对象映射
AutoMapper
AutoMapper 10个常用方法总结
缓存
Redis支持哪几种数据类型?
什么是Redis?简述它的优缺点?
Redis相比memcached有哪些优势?
认证
什么是 JWT?它是如何工作的?
.net framework jwt
.net core Jwt操作
认证管理
.Net WebApi校验Token/参数的几种方式
鉴权授权
Authorization的几种方式
基础语法
集合
1、C#中常用集合类型
yield return 简化迭代并提高代码质量
AOP
.net core AOP
操作筛选器
网络编程
TCP 连接的前世今生
HttpRequest,WebRequest,HttpWebRequest,WebClient,HttpClient 之间的区别
网络编程
WebApi获取客户信息
通信
HTTP通信
公共类-HttpHelper
多线程编程
十种线程方式分析
Task-筑基期
parallel-筑基
消息队列
Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
构建高性能 API 的高级技术
优秀教程网站
每日学习地址
全套教程汇总
理解ASP.NET Core
定时任务
定时器的三种使用方式
定时任务之windows任务计划程序
创建任务到Windows任务计划程序
定时任务之Quartz.Net
IHostedService启动时运行定时任务
JSON序列化反序列化工具
前辈
发布部署
应用部署
GRPC
使用GRPC多个proto文件
本文档使用 MrDoc 发布
-
+
首页
TcpClient 进行客户端通信
**TcpClient 类简介** TcpClient 类提供了简单的方法来连接到 TCP 网络服务。通过 TcpClient,我们可以与服务器建立连接,发送和接收数据。该类封装了 TCP 连接的创建和管理,简化了与服务器进行网络通信的过程。 **主要方法** | 序号 | 方法名 | 列名 | | --- | --- | --- | | 1 |Connect(string hostname, int port) | 连接到指定主机名和端口号的远程主机 | | 2 |Connect(IPAddress[] ipAddresses, int port) | 连接到指定 IP 地址数组和端口号的远程主机 | | 3 | GetStream() | 获取用于发送和接收数据的网络流。| | 4 | Close() | 关闭 TcpClient 并释放所有资源。| **界面设计** 下面是一个使用 TcpClient 的简单客户端应用程序,它连接到服务器,发送消息,并接收服务器的响应。 ```java using System; using System.Net.Sockets; using System.Text; using System.Windows.Forms; public partial class Form1 : Form { private TcpClient client; // TcpClient实例 private NetworkStream stream; // 网络流,用于与服务器通信 public Form1() { InitializeComponent(); } /// <summary> /// 连接到服务器 /// </summary> /// <param name="server">服务器IP地址或主机名</param> /// <param name="port">端口号</param> private async void ConnectToServer(string server, int port) { try { // 创建一个TcpClient实例 client = new TcpClient(); // 异步连接到指定的服务器IP和端口 await client.ConnectAsync(server, port); // 获取与服务器通信的网络流 stream = client.GetStream(); // 启动一个异步任务接收来自服务器的消息 ReceiveMessages(); // 如果连接成功,更改窗口标题以显示已连接 this.Text = "Connected"; } catch (Exception ex) { // 如果在尝试连接过程中发生异常,显示错误消息 MessageBox.Show($"连接服务器时出错: {ex.Message}"); } } /// <summary> /// 发送消息到服务器 /// </summary> /// <param name="message">要发送的消息</param> private async void Send(string message) { try { // 检查网络流是否已经初始化,确保我们可以发送数据 if (stream != null) { // 将字符串消息转换为UTF-8编码的字节数组 byte[] data = Encoding.UTF8.GetBytes(message); // 异步地将数据写入网络流 // 这是发送数据到服务器的实际操作 await stream.WriteAsync(data, 0, data.Length); } } catch (Exception ex) { // 如果在发送数据过程中发生异常(如连接断开),显示错误消息 MessageBox.Show($"发送消息时出错: {ex.Message}"); } } /// <summary> /// 异步接收来自服务器的消息 /// </summary> private async void ReceiveMessages() { try { // 创建一个缓冲区用于接收数据 byte[] buffer = new byte[1024]; int numberOfBytesRead; // 循环读取网络流中的数据,直到没有更多数据 while ((numberOfBytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) != 0) { // 将接收到的字节数据转换为字符串 string receivedMessage = Encoding.UTF8.GetString(buffer, 0, numberOfBytesRead); // 在UI线程上安全地更新文本框以显示接收到的消息 // 这是必要的,因为ReceiveMessages不在UI线程上运行 Invoke(new Action(() => { txtDisplay.AppendText(receivedMessage + Environment.NewLine); })); } } catch (Exception ex) { // 如果在接收数据过程中发生异常(如连接断开),显示错误消息 MessageBox.Show($"接收消息时出错: {ex.Message}"); } } /// <summary> /// 发送按钮的点击事件处理 /// </summary> private void btnSend_Click(object sender, EventArgs e) { Send(txtMessage.Text); txtMessage.Clear(); // 清空输入框 } /// <summary> /// 连接按钮的点击事件处理 /// </summary> private void btnConnect_Click(object sender, EventArgs e) { // 替换为你的服务器地址和端口 ConnectToServer("127.0.0.1", 3001); } } ```
孙端己
2024年7月22日 11:30
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码