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

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

1、创建一个自定义的数据结构来保存字符串和图片数据。

2、将字符串转换为字节数组。

3、将图片数据转换为字节数组。

4、将字符串和图片数据的字节数组合并,并发送到服务端。

客户端代码示例:

csharp 复制代码
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、将分割后的数据转换回原始格式。

服务端代码示例:

csharp 复制代码
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方法假设数据包中的消息部分在前,图片部分在后。在实际应用中,你可能需要根据实际情况调整这个逻辑。

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

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

相关推荐
北极光SD-WAN组网2 小时前
从0到1搭建某铝箔智慧工厂网络:5G与WiFi 6助力智能制造
网络·5g·制造
阿昭L2 小时前
HTTP原理
网络·网络协议·http
hazy1k3 小时前
STM32H750 RTC介绍及应用
网络·stm32·实时音视频
没书读了3 小时前
考研复习-计算机网络-第三章-数据链路层
网络·计算机网络·考研
zhao3266857513 小时前
2025年代理IP三强横评:LoongProxy、神龙海外动态IP代理、全民HTTP怎么选?看完这篇不踩坑
网络协议·tcp/ip·http
on the way 1233 小时前
多线程之HardCodedTarget(type=OssFileClient, name=file, url=http://file)异常
网络·网络协议·http
WhoisXMLAPI3 小时前
WhoisXML API再次荣登2025年美国Inc. 5000快速成长企业榜单
网络·安全
阿sir1984 小时前
ZYNQ 自定义IP
服务器·网络·tcp/ip
xiaowu0805 小时前
策略模式-不同的鸭子的案例
开发语言·c#·策略模式
星马梦缘5 小时前
计算机网络4 第四章 网络层——网络间的通信问题(省际之间如何规划信件运输路线)
网络·计算机网络·路由·ip地址·子网掩码·icmp·ipv4/ipv6