新人作业之基于TCP连接,用消息队列实现图片发送功能,

本文介绍了如何使用TCP连接和System V消息队列实现服务器向多个客户端发送图片的功能。在实践中遇到的问题包括:选择POSIX还是System V消息队列,接收图片失真,以及正确设置消息队列的消息类型以实现群发。解决方案包括:根据需求选择System V消息队列,调整msgsz参数避免图片失真,并确保每个客户端的消息类型唯一,以确保每个客户端都能完整接收图片。
摘要由CSDN通过智能技术生成

具体要求是:
1、客户端接受图片,服务器发送图片,建立TCP 连接
2、每次有客户端过来,服务器创建一个线程单独实现图片发送功能
3、最多5个客户端同时连接服务器,超过5个就会失败
4、服务器本地存储一张图片,在服务器处输入“start”之后,服务器就开始向在线的客户端发送图片
5、客户端收到图片之后,保存到一个目录中,目录名是年月日,文件名为时分秒

简单来说:就是服务器向客户端发送图片。。。。。。。看起来很简单,我在具体实现的过程中踩了几个大坑:

1、以前在学校学习的时候学的是msgget,msgsnd,msgrcv这些System V标准下的消息队列,哪知道现在参加工作之后,又有了POSIX标准下的消息队列。在开始的选择的时候,也考虑过选什么(其实我两个的版本都写了)。

基于服务器要向在线的客户端发送图片,即相当于实现一个群发功能,我还是选择了System V标准的消息队列。两个有个区别就是,POSIX下的收发函数有个参数是优先级,我在发送的时候,设置了一个优先级,然后recv函数那里收到的优先级是一样的,而SystemV标准的函数可以设置固定位置的消息类型

2、服务器在向客户端发送图片的时候,客户端处接受的图片会失真
就是这个样子的

然后通过打印客户端和服务器那边的数据发现,大小也没有差很多,在网上查了很久,也没有人遇到这个问题,后来,无意间看到对消息队列中 对下面这个结构体的解释

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值