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

C# tcp客户端字符串(图片名称)+ 图片数据打包,发送到服务端;服务端接收到数据后解析数据包

在C#中,要将字符串和图片数据打包发送到服务端,并在服务端解析这些数据,可以按照以下步骤进行:
客户端打包数据

1、创建一个自定义的数据结构来保存字符串和图片数据。
2、将字符串转换为字节数组。
3、将图片数据转换为字节数组。
4、将字符串和图片数据的字节数组合并,并发送到服务端。

客户端代码示例:

using System;
using System.IO;
using System.Net.Sockets;
using System.Text;public class TcpClientExample
{public static void Main(){using (Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)){client.Connect("服务端IP", 服务端端口);using (NetworkStream stream = new NetworkStream(client)){using (BufferedStream bufferedStream = new BufferedStream(stream)){string message = "这是一条消息";byte[] messageBytes = Encoding.UTF8.GetBytes(message);byte[] imageBytes = File.ReadAllBytes("图片路径");// 创建一个数据包DataPackage dataPackage = new DataPackage{Message = messageBytes,ImageData = imageBytes};// 发送数据包bufferedStream.Write(dataPackage.ToBytes(), 0, dataPackage.ToBytes().Length);}}}}
}public class DataPackage
{public byte[] Message { get; set; }public byte[] ImageData { get; set; }public byte[] ToBytes(){byte[] totalData = new byte[Message.Length + ImageData.Length];Array.Copy(Message, totalData, Message.Length);Array.Copy(ImageData, 0, totalData, Message.Length, ImageData.Length);return totalData;}
}

服务端解析数据

1、接收客户端发送的数据。
2、根据数据包的结构,分割字符串和图片数据。
3、将分割后的数据转换回原始格式。

服务端代码示例:

using System;
using System.IO;
using System.Net.Sockets;
using System.Text;public class TcpServerExample
{public static void Main(){using (Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)){server.Bind(new IPEndPoint(IPAddress.Loopback, 服务端端口));server.Listen(10);Console.WriteLine("服务器正在监听...");using (Socket client = server.Accept()){using (NetworkStream stream = new NetworkStream(client)){using (BufferedStream bufferedStream = new BufferedStream(stream)){byte[] buffer = new byte[1024];int read = bufferedStream.Read(buffer, 0, buffer.Length);// 创建一个数据包DataPackage receivedDataPackage = new DataPackage();receivedDataPackage.FromBytes(buffer, read);// 解析数据包string receivedMessage = Encoding.UTF8.GetString(receivedDataPackage.Message);byte[] receivedImageData = receivedDataPackage.ImageData;Console.WriteLine("接收到的消息: " + receivedMessage);// 这里可以保存图片数据或者进行其他处理}}}}}
}public class DataPackage
{public byte[] Message { get; set; }public byte[] ImageData { get; set; }public void FromBytes(byte[] data, int length)
{int messageLength = length - ImageData.Length;Message = new byte[messageLength];Array.Copy(data, 0, Message, 0, messageLength);ImageData = new byte[length - messageLength];Array.Copy(data, messageLength, ImageData, 0, length - messageLength);
}
}

在服务端,我们创建了一个DataPackage对象,并使用FromBytes方法来解析从客户端接收到的字节数据。这个方法首先计算出消息的长度,然后从字节数组中提取消息和图片数据。

请注意,上述代码示例中的FromBytes方法假设数据包中的消息部分在前,图片部分在后。在实际应用中,你可能需要根据实际情况调整这个逻辑。

此外,上述代码示例没有处理网络异常和错误,这在实际应用中是必不可少的。你也可能需要考虑对数据进行加密和压缩,尤其是在不安全的网络环境中。

最后,确保在发送和接收数据时,客户端和服务端的数据格式是一致的,这样才能正确地解析数据。

http://www.lryc.cn/news/284357.html

相关文章:

  • 【机组】算术逻辑单元带进位运算实验的解密与实战
  • axios query传数组参数的格式
  • 2018年认证杯SPSSPRO杯数学建模B题(第一阶段)动态模糊图像全过程文档及程序
  • qt学习:Qfile文件类
  • 从 GPT1 - GPT4 拆解
  • Python项目——计算器(PySide6+Pyinstaller)
  • ChatGPT 和文心一言哪个更好用?
  • 数据备份与恢复
  • 数据库原理及数据库的优化
  • C语言第三弹---数据类型和变量
  • [通知]rust跟我学:文件时间属性获得方法文章已上线
  • 基于嵌入式的智能智能通风系统
  • 如何编写一个好的测试用例?才能防止背黑锅
  • 笨蛋学设计模式行为型模式-观察者模式【14】
  • 上海智慧岛大数据云计算中心项目正式封顶!
  • 靶场实战(19):OSCP备考之VulnHub HA WORDY
  • 大模型学习与实践笔记(九)
  • fpga目前就业形势咋样?
  • Linux7 安装 Oracle 19C RAC 详细图文教程
  • 【SpringBoot】SpringBoot 项目初始化方法
  • 34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
  • Mysql深度分页优化的一个实践
  • 【JavaEE进阶】 SpringBoot配置⽂件
  • excel 常用函数
  • 【React基础】– JSX语法
  • SpringBoot 项目中后端实现跨域的5种方式!!!
  • Vue3前端开发,provide和enject的基础练习,跨层级传递数据
  • Python 循环结构值while循环
  • MSSQL-识别扩展extended event(扩展事件)中的时间单位
  • vue3中l和vue2中v-model不同点