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

C#通过字节码模拟接收和发送XML数据

写一个客户端和服务器端,分别用于发送和接受xml数据。
参考:https://blog.csdn.net/qq_22120623/article/details/134658839。

客户端

code

using System;
using System.IO;
using System.Net.Sockets;
using System.Xml.Serialization;// 与服务器端使用相同的数据模型
[Serializable]
public class DataMessage
{public int Id { get; set; }public string Content { get; set; }public DateTime Timestamp { get; set; }public bool IsProcessed { get; set; }
}class XmlClient
{private const string ServerIp = "127.0.0.1"; // 服务器IP地址private const int ServerPort = 8888;         // 服务器端口private const int BufferSize = 4096;static void Main(string[] args){Console.WriteLine("XML Client started...");TcpClient client = null;try{// 连接到服务器client = new TcpClient(ServerIp, ServerPort);Console.WriteLine($"Connected to server {ServerIp}:{ServerPort}");// 创建要发送的数据DataMessage message = new DataMessage{Id = 1,Content = "这是一条测试消息",Timestamp = DateTime.Now,IsProcessed = false};PrintXML(message);  // 打印信息到控制台// 获取网络流using (NetworkStream stream = client.GetStream()){// 将对象序列化为XML并发送XmlSerializer serializer = new XmlSerializer(typeof(DataMessage));using (MemoryStream memoryStream = new MemoryStream()){// 序列化对象到内存流serializer.Serialize(memoryStream, message);byte[] data = memoryStream.ToArray();// 发送数据stream.Write(data, 0, data.Length);Console.WriteLine("Data sent to server:");Console.WriteLine($"Id: {message.Id}");Console.WriteLine($"Content: {message.Content}");}// 等待并接收服务器响应MemoryStream responseStream = new MemoryStream();byte[] buffer = new byte[BufferSize];int bytesRead;while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0){responseStream.Write(buffer, 0, bytesRead);if (stream.DataAvailable == false)break;}// 反序列化响应responseStream.Position = 0;DataMessage response = (DataMessage)serializer.Deserialize(responseStream);Console.WriteLine("\nReceived response from server:");Console.WriteLine($"Id: {response.Id}");Console.WriteLine($"Content: {response.Content}");Console.WriteLine($"Timestamp: {response.Timestamp}");}}catch (Exception ex){Console.WriteLine($"Error: {ex.Message}");}finally{// 关闭客户端连接client?.Close();Console.WriteLine("\nClient disconnected.");}Console.WriteLine("Press any key to exit...");Console.ReadKey();}static void PrintXML(DataMessage dm){// 创建XmlSerializer对象,并指定实体类型XmlSerializer serializer = new XmlSerializer(typeof(DataMessage));// 创建一个StringWriter对象,用于写入XML字符串StringWriter writer = new StringWriter();// 调用Serialize方法将实体类对象转换为XML字符串serializer.Serialize(writer, dm);// 获取XML字符串string xmlString = writer.ToString();// 输出XML字符串Console.WriteLine(xmlString);}
}

输出

XML Client started...
Connected to server 127.0.0.1:8888
<?xml version="1.0" encoding="utf-16"?>
<DataMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Id>1</Id><Content>这是一条测试消息</Content><Timestamp>2025-09-05T13:37:21.2233157+08:00</Timestamp><IsProcessed>false</IsProcessed>
</DataMessage>
Data sent to server:
Id: 1
Content: 这是一条测试消息Received response from server:
Id: 1
Content: Data received successfully
Timestamp: 2025/9/5 13:43:54Client disconnected.
Press any key to exit...

服务器

code

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Xml.Serialization;// 定义要传输的数据模型
[Serializable]
public class DataMessage
{public int Id { get; set; }public string Content { get; set; }public DateTime Timestamp { get; set; }public bool IsProcessed { get; set; }
}class XmlServer
{private const int Port = 8888;private const int BufferSize = 4096;static void Main(string[] args){Console.WriteLine("XML Server started...");Console.WriteLine($"Listening for connections on port {Port}...");// 创建TCP监听器TcpListener server = null;try{// 监听所有网络接口上的指定端口server = new TcpListener(IPAddress.Any, Port);server.Start();while (true){Console.WriteLine("Waiting for a connection...");// 等待客户端连接TcpClient client = server.AcceptTcpClient();Console.WriteLine("Client connected!");// 处理客户端请求HandleClient(client);}}catch (SocketException e){Console.WriteLine($"Socket exception: {e.Message}");}finally{// 停止服务器server?.Stop();Console.WriteLine("Server stopped.");}}private static void HandleClient(TcpClient client){try{// 获取网络流using (NetworkStream stream = client.GetStream()){byte[] buffer = new byte[BufferSize];MemoryStream memoryStream = new MemoryStream();int bytesRead;// 读取所有数据while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0){memoryStream.Write(buffer, 0, bytesRead);// 简单判断:如果客户端发送了结束标记(实际应用中可能需要更复杂的判断)if (stream.DataAvailable == false)break;}// 将接收到的字节反序列化为对象memoryStream.Position = 0; // 重置流位置XmlSerializer serializer = new XmlSerializer(typeof(DataMessage));DataMessage receivedData = (DataMessage)serializer.Deserialize(memoryStream);// 显示接收到的数据Console.WriteLine("\nReceived XML data:");Console.WriteLine($"Id: {receivedData.Id}");Console.WriteLine($"Content: {receivedData.Content}");Console.WriteLine($"Timestamp: {receivedData.Timestamp}");Console.WriteLine($"IsProcessed: {receivedData.IsProcessed}");// 发送响应DataMessage response = new DataMessage{Id = receivedData.Id,Content = "Data received successfully",Timestamp = DateTime.Now,IsProcessed = true};// 序列化响应对象为XML并发送using (MemoryStream responseStream = new MemoryStream()){serializer.Serialize(responseStream, response);byte[] responseBytes = responseStream.ToArray();stream.Write(responseBytes, 0, responseBytes.Length);Console.WriteLine("\nResponse sent to client.");}}}catch (Exception ex){Console.WriteLine($"Error handling client: {ex.Message}");}finally{// 关闭客户端连接client.Close();Console.WriteLine("Client connection closed.\n");}}
}

输出

XML Server started...
Listening for connections on port 8888...
Waiting for a connection...
Client connected!Received XML data:
Id: 1
Content: 这是一条测试消息
Timestamp: 2025/9/5 13:37:21
IsProcessed: FalseResponse sent to client.
Client connection closed.Waiting for a connection...
http://www.dtcms.com/a/428392.html

相关文章:

  • 做网站前台步骤怎么在拼多多开无货源网店
  • 网站建设实施wordpress 放视频
  • 网站建设的税率是多少wordpress自动更新表格
  • C语言作用域与数组详解
  • destoon 网站后台显示不出模板网站色调设计方案
  • 酒托做哪个网站好版面设计图大全 模板
  • AIGC图片视频制作通用提示词
  • 如何做同城信息网站个人网站视频建设
  • 最牛的大型网站建设公司广告设计接单app
  • 5.吴恩达机器学习—神经网络的基本使用
  • OSPF协议详解1:从基础概念到区域划分与报文类型解析
  • 广州哪里做公司网站号一级造价工程师报考条件及科目
  • 数据结构算法学习:LeetCode热题100-普通数组篇(最大子数组和、合并区间、轮转数组、除自身以外数组的乘积、缺失的第一个正常数)
  • JAVA爬虫实战项目——OKX解析
  • 解除网站开发合同 首付款是否退长沙公司网站设计报价
  • DOM CSS:深入理解与高效运用
  • 闵行网站建设外包微信营销策略有哪些
  • 创建网站怎么赚钱的如何做一个好网站
  • Elasticsearch - Linux下使用Docker对Elasticsearch容器设置账号密码
  • 10. Spring AI + RAG
  • wordpress做自建站上海高品质网站建设公司
  • 网站开发如何找甲方网站后台维护费用
  • 智能化企业级CRM系统开发实战飞算JavaAI全流程体验
  • Matlab通过GUI实现点云的PCA配准(附最简版)
  • 10.17 上海 Google Meetup:从数据出发,解锁 AI 助力增长的新边界
  • 免费成品网站下载上海网站设计多少钱
  • 外管局网站上做预收登记制作公司网页图片
  • 【DockerFile+Nginx+DockerCompose】前后端分离式项目部署(docker容器化方式)
  • 快速傅里叶变换简介及python实现
  • 网站的实现怎么写重庆网站seo方法