AvaloniaTCP-v1.0.0:学习使用Avalonia/C#进行TCP通讯的一个简单Demo

news/2024/10/14 13:01:43

TCP通讯简介

TCP(传输控制协议,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保数据包按顺序传输,并在必要时进行重传,以保证数据的完整性和准确性。TCP通过三次握手建立连接,通过四次挥手释放连接,确保通信双方在传输数据前已准备好,并在传输结束后正确关闭连接。TCP广泛应用于需要高可靠性的网络应用,如网页浏览、文件传输和电子邮件等。

Demo效果

启动两个应用,一个当服务端,一个当客户端。

开启服务端:

image-20241014112528767

开启客户端:

image-20241014112558142

客户端向服务端发送消息:

image-20241014112646168

服务端向客户端发送消息:

image-20241014112730780

Demo代码

启动服务端:

[RelayCommand]
private async Task StartServer()
{System.Net.IPAddress Ip = System.Net.IPAddress.Parse(IpAddress);_tcpServer = new TcpListener(Ip, Port);_tcpServer.Start();Message += "Server started. Waiting for a connection...\r\n";// 接受客户端连接_tcpServer_Client = await _tcpServer.AcceptTcpClientAsync();Message += "客户端已连接\r\n";// Handle client communication_ = HandleClientAsync(_tcpServer_Client);
}
private async Task HandleClientAsync(TcpClient client)
{var stream = client.GetStream();var buffer = new byte[1024];int bytesRead;while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) != 0){var message = Encoding.UTF8.GetString(buffer, 0, bytesRead);Message+=$"Received from client: {message}\r\n";// Echo the message back to the client//var response = Encoding.UTF8.GetBytes($"Echo: {message}");//await stream.WriteAsync(response, 0, response.Length);}Message += "Client disconnected...\r\n";stream.Close();
}

启动客户端:

 [RelayCommand]private async Task StartClient(){System.Net.IPAddress Ip = System.Net.IPAddress.Parse(IpAddress);_tcpClient = new TcpClient();await _tcpClient.ConnectAsync(Ip, Port);Message += "Connected to server...\r\n";_ = HandleServerCommunicationAsync(_tcpClient);}
private async Task HandleServerCommunicationAsync(TcpClient client)
{var stream = client.GetStream();var buffer = new byte[1024];int bytesRead;while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) != 0){var message = Encoding.UTF8.GetString(buffer, 0, bytesRead);Message += $"Received from server: {message}\r\n";}Message += "Disconnected from server...\r\n";stream.Close();
}

向服务端发消息:

 [RelayCommand]private async Task SendMessageToServer(){if (_tcpClient == null || !_tcpClient.Connected){Message += "Not connected to server.\r\n";return;}var stream = _tcpClient.GetStream();var data = Encoding.UTF8.GetBytes(Text);await stream.WriteAsync(data, 0, data.Length);Message += $"Sent: {Text}\r\n";}

向客户端发消息:

[RelayCommand]
private async Task SendMessageToClient()
{if (_tcpServer_Client == null || !_tcpServer_Client.Connected){Message += "Not connected to client.\r\n";return;}var stream = _tcpServer_Client.GetStream();var data = Encoding.UTF8.GetBytes(Text);await stream.WriteAsync(data, 0, data.Length);Message += $"Sent: {Text}\r\n";
}

全部代码已上传至https://github.com/Ming-jiayou/AvaloniaTCP。

希望通过我的点滴分享,能够让对Avalonia感兴趣的朋友,更快入门。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71414.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【CTF】CTF-OS:一个专门为CTF设计的操作系统

前言 CTF-OS是探姬为CTF比赛特制的虚拟机,封装多版本工具集与系统,适合CTF新手、各行业人士及安全工作者使用,尤其适合不愿在工作机安装特殊软件的用户。注意,CTF不同于渗透测试,本虚拟机专为CTF赛事人员定制。 如果你也想学习CTF那么我特意准备好了一封CTF学习资料2000页…

【日记】包装好看度与配料表健康度成反比(1550 字)

正文昨天才上完班,怎么明天又要上班啊……今天起床头发好炸,就像哪个山洞里刚出来的野人。昨晚明明吹了头发的啊,我看着镜子里的自己有些哭笑不得。报复性熬夜玩到了 3 点。今天 11:30 起床,感觉眼睛还是很肿,没睡好。可能就是因为太晚了。中午又睡了个午觉,起床感觉眼睛…

程序员开发利器:Your Commands网站上线

各种命令行工具是我们IT行业日常工作离不开的,但是对于命令行工具的使用有一个痛点:文档上每一个命令行参数写的清清楚楚,但是怎么组合起来用却搞不清楚。所以为了解决这个问题每个人都应该有一个记事本,记录下来自己常用的完整命令行,每次用的时候翻出来直接用就可以。但…

Stable diffusion语法

进阶语法: 1、下划线 “—” 用下划线连接两个单词,表达是一体,是融合的意思,比如:a plate of coffee cake, 这里的咖啡和蛋糕,在生成就是两个独立体,用下滑线连在一起就是咖啡色的蛋糕 a plate of coffee_cake→ 2、控制提示词的生效时间 2.1 [提示词:0-7数值] FORES…

TowardsDataScience-博客中文翻译-2020-九十-

TowardsDataScience 博客中文翻译 2020(九十)原文:TowardsDataScience Blog 协议:CC BY-NC-SA 4.0Python 中的打包:工具和格式原文:https://towardsdatascience.com/packaging-in-python-tools-and-formats-743ead5f39ee?source=collection_archive---------5-----------…

jmeter 参数化 csv插件的读取文件 bin目录

问题: ${__P(user.dir,)}${__P(file.separator,)}

TowardsDataScience-博客中文翻译-2019-四十一-

TowardsDataScience 博客中文翻译 2019(四十一)原文:TowardsDataScience Blog 协议:CC BY-NC-SA 4.0机器学习中的核心秘密。一原文:https://towardsdatascience.com/kernel-secrets-in-machine-learning-2aab4c8a295f?source=collection_archive---------5--------------…

TowardsDataScience-博客中文翻译-2019-四十二-

TowardsDataScience 博客中文翻译 2019(四十二)原文:TowardsDataScience Blog 协议:CC BY-NC-SA 4.0井字游戏的经验教训:实用强化学习技巧原文:https://towardsdatascience.com/lessons-learned-from-tic-tac-toe-practical-reinforcement-learning-tips-5cac654a45a8?so…