socket 传图片不完整
答案:2 悬赏:0 手机版
解决时间 2021-02-22 05:36
- 提问者网友:我的未来我做主
- 2021-02-21 04:40
socket编程,基于TCP协议,用VC开发的服务器端向java开发的客户端发送图片,bmp格式的,但客户端只接收到一半的图片,另一半是黑色,这是什么原因造成的?该如何解决?
最佳答案
- 五星知识达人网友:神鬼未生
- 2021-02-21 05:21
TCP传送?
我想你不是传送的结构体吧,你一定是只发包了,但是并没有发包的ID,如果有一个ID控制包的位置的话,我想不会出这种错误。
你是怎么判断文件传送结束的。
BMP头里面有个变量是文件的长度,如果你在客户端接受的时候,遇到一个标志意思是文件的结束的话,客户端会结束接收,并不再继续接收(我是这么理解的,我没看到你的代码,大致我也就能这么说),虽然客户端停止接受了,但是BMP头还在,它里面的文件长度还在,后面缺少的包、数据之类的东西,我想它是用0来补充了,而RGB(0,0,0)就是黑色,所以你后面的东西都被0覆盖了
传送的时候,应该尽可能在每个包里面都放一个简略的文件信息
比如
typedef struct _BmpBmpBmp
{
int All;//一共有多少个包
int index;//第多少个包,索引
//再加一些其他的信息
char a[???];//根据需要开辟空间,每次传送的数据
}BBBmp;
我想你不是传送的结构体吧,你一定是只发包了,但是并没有发包的ID,如果有一个ID控制包的位置的话,我想不会出这种错误。
你是怎么判断文件传送结束的。
BMP头里面有个变量是文件的长度,如果你在客户端接受的时候,遇到一个标志意思是文件的结束的话,客户端会结束接收,并不再继续接收(我是这么理解的,我没看到你的代码,大致我也就能这么说),虽然客户端停止接受了,但是BMP头还在,它里面的文件长度还在,后面缺少的包、数据之类的东西,我想它是用0来补充了,而RGB(0,0,0)就是黑色,所以你后面的东西都被0覆盖了
传送的时候,应该尽可能在每个包里面都放一个简略的文件信息
比如
typedef struct _BmpBmpBmp
{
int All;//一共有多少个包
int index;//第多少个包,索引
//再加一些其他的信息
char a[???];//根据需要开辟空间,每次传送的数据
}BBBmp;
全部回答
- 1楼网友:走死在岁月里
- 2021-02-21 06:50
方法没有问题,你检查一下client里面read和fwrite的size参数,肯定是这里搞错了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯