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

TCP通讯简介

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

Demo效果

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

开启服务端:

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

开启客户端:

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

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

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

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

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

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...rn";      // 接受客户端连接     _tcpServer_Client = await _tcpServer.AcceptTcpClientAsync();     Message += "客户端已连接rn";      // 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}rn";          // Echo the message back to the client         //var response = Encoding.UTF8.GetBytes($"Echo: {message}");         //await stream.WriteAsync(response, 0, response.Length);     }      Message += "Client disconnected...rn";     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...rn";            _ = 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}rn";             }      Message += "Disconnected from server...rn";     stream.Close(); } 

向服务端发消息:

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

向客户端发消息:

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

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

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

发表评论

相关文章