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

这篇具有很好参考价值的文章主要介绍了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方法假设数据包中的消息部分在前,图片部分在后。在实际应用中,你可能需要根据实际情况调整这个逻辑。

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

最后,确保在发送和接收数据时,客户端和服务端的数据格式是一致的,这样才能正确地解析数据。文章来源地址https://www.toymoban.com/news/detail-807222.html

到了这里,关于C# tcp客户端字符串(图片名称)+ 图片数据打包,发送到服务端;服务端接收到数据后解析数据包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 解决TCP Server 关不掉客户端连接的问题

    拷贝了一段 TCP Server的应用代码,第一次运行正常,但是关闭软件或者实现disconnect+close后都无法关闭端口连接。 关闭之后,另外一个客户端还在正常与PC连接。 TCP Server 重新运行,无法接收到客户端的连接。 1、 C#  .net界面程序 2、 .net 4.8.1 3、 System.Net.Sockets 4、 TcpListener 接

    2024年02月15日
    浏览(44)
  • TCP通信—客户端与客户端的双向通信

    1.实现客户端与客户端之间的TCP双向通信; 2.服务器记录客户端实名连接,并显示客户端数据记录; 3.客户端退出,服务器和另一客户端显示相应提示; 1.定义数组保存客户端文件描述符; 2.主程序负责接收客户端1的数据发送给客户端2; 3.开展一个线程负责接收到客户端2的

    2024年02月15日
    浏览(41)
  • TCP、UDP客户端

    TCP客户端 #include mystdio.h #define CLI_PORT 6666 #define CLI_IP \\\"192.168.124.210\\\" int main(int argc, const char *argv[])//argv[1] IP  argv[2] 端口号 {     if(argc 3)     {         printf(\\\"请在命令传参端口号和IP地址n\\\");         return -1;     }     //创建流式套接字文件     int cfd = socket(AF_INET,SOCK

    2024年04月25日
    浏览(33)
  • 【0815作业】搭建select的TCP客户端、poll客户端、tftp文件上传

    IO多路复用(重点!!!) 进程中如果同时需要处理多路输入输出流,在使用单进程单线程的情况下,同时处理多个输入输出请求。 在无法用多进程多线程,可以选择用IO多路复用; 由于不需要创建新的进程和线程,减少系统的资源开销,减少上下文切换的次数。 允许同时

    2024年02月12日
    浏览(40)
  • QT TCP客户端实现

    QTcpSocket实例首先是通过connectToHost()尝试连接到服务器,需要指定服务器的IP地址和端口。connectToHost()是异步方式连接服务器,不会阻塞程序运行,连接后发射connected()信号。 如果需要使用阻塞方式连接服务器,则使用waitForConnected()函数阻塞程序运行,直到连接成功或失败。

    2024年02月09日
    浏览(47)
  • tcp通信,客户端服务端

    //TCP通信的流程 //服务器端(被动接受连接的角色) 1.创建一个用于监听的套接字         -监听:监听有客户端的连接         -套接字:这个套接字其实就是一个文件描述符 2.将这个监听文件描述符和本地的IP和端口绑定(IP和端口就是服务器的地址信息)         -客户端

    2024年02月09日
    浏览(35)
  • Python3 TCP 客户端

    下面是一个简单的 Python TCP 客户端示例代码,用于与之前提到的 EchoServer 进行通信: 这段代码实现了一个简单的 TCP 客户端,它会不断地向服务器发送消息,并接收服务器返回的消息。用户可以在控制台上输入消息,客户端会将消息发送给服务器并打印出服务器返回的消息。

    2024年02月21日
    浏览(43)
  • 三:基于TCP的服务端/客户端

    其中四层模型说的就是TCP(UDP)/IP协议栈 并列图片 listen详解 当客户端发送连接请求时,并不一定能立即连接到。尽管此时服务端处于等待连接请求状态(listen),但是由于系统正忙,此连接请求需要进入连接请求等待队列,listen第二个参数便是设置此等待队列的大小。 accept函数

    2024年01月20日
    浏览(46)
  • java socket Server TCP服务端向指定客户端发送消息;可查看、断开指定连接的客户端;以及设置客户端最大可连接数量。

    首先需要知道java里如何创建一个Socket服务器端。 提示:注意server.accept()方法调用会阻塞,只有新的客户端连接后才返回一个新的socket对象。如果一直未连接那么会一直处于阻塞状态 了解了如何创建一个socket服务器端后。那么如何实现给指定的连接客户端发送消息呢?首先我

    2024年02月11日
    浏览(69)
  • QT实现tcp服务器客户端

    2024年02月07日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包