具体要求是:
1、客户端接受图片,服务器发送图片,建立TCP 连接
2、每次有客户端过来,服务器创建一个线程单独实现图片发送功能
3、最多5个客户端同时连接服务器,超过5个就会失败
4、服务器本地存储一张图片,在服务器处输入“start”之后,服务器就开始向在线的客户端发送图片
5、客户端收到图片之后,保存到一个目录中,目录名是年月日,文件名为时分秒
简单来说:就是服务器向客户端发送图片。。。。。。。看起来很简单,我在具体实现的过程中踩了几个大坑:
1、以前在学校学习的时候学的是msgget,msgsnd,msgrcv这些System V标准下的消息队列,哪知道现在参加工作之后,又有了POSIX标准下的消息队列。在开始的选择的时候,也考虑过选什么(其实我两个的版本都写了)。
基于服务器要向在线的客户端发送图片,即相当于实现一个群发功能,我还是选择了System V标准的消息队列。两个有个区别就是,POSIX下的收发函数有个参数是优先级,我在发送的时候,设置了一个优先级,然后recv函数那里收到的优先级是一样的,而SystemV标准的函数可以设置固定位置的消息类型
2、服务器在向客户端发送图片的时候,客户端处接受的图片会失真
然后通过打印客户端和服务器那边的数据发现,大小也没有差很多,在网上查了很久,也没有人遇到这个问题,后来,无意间看到对消息队列中 对下面这个结构体的解释