首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

windows停C中scoket传输图片

2013-09-12 
windows下C中scoket传输图片本帖最后由 chen3110008916 于 2013-09-04 18:56:04 编辑我想用scoket实现传输

windows下C中scoket传输图片
本帖最后由 chen3110008916 于 2013-09-04 18:56:04 编辑 我想用scoket实现传输图片,主要思想是 打开图片->读入图片入buffer ->将buffer循环转移到sendbuf,并发送数据 。
问题是:不知道为什么打开图片数据再保存就不行了,图片就变样了。
PS.传txt文件是没有问题的。
下面是关键代码:


/////////////////////////////////////////////////////////////////////////////////////
//前面有关scoket的各种事情,参考的是孙鑫的《VC++深入详解》
/////////////////////////////////////////////////////////////////////////////////////
FILE *pFile=fopen("D:\\111.jpg","r");//之前的乱码系因为当j=lenFile的时候,*sendbuf='0',这样是把sendbuf的第一个字符变0,当然乱码啦.
char *buffer;
fseek(pFile,0,SEEK_END);
int lenFile=ftell(pFile);
buffer=new char[lenFile+1];
int i=0;
for (i=0;i<lenFile+1;i++)
{
buffer[i]=0;
}
fseek(pFile,0,SEEK_SET);//上面将文件指针重设在文件头部.
fread(buffer,1,lenFile,pFile);
itoa(lenFile,buffer,4);
buffer[lenFile]='\0';
fclose(pFile);
//////////////////////////////////////////////////////////////////////////
char sendBuf[1024];
int j=0;
while (1)
{
memset(sendBuf,0,1024);
for (i=0;i<1024;i++,j++)
{
sendBuf[i]=buffer[j];
if(j==lenFile)//退出for循环,buffer的数据已经全部转移了.
{
break;
}
}
printf("%s\n",sendBuf);
sendto(sockClient,sendBuf,1024,0,(SOCKADDR*)&addrSrv,len);
if(j==lenFile)//退出while循环,发送数据完毕了
{
break;
}
}
/////////////////从buffer中的数据保存成图片,看与接收端对比//////////
////////发现是发出端的数据问题,这里还是为了方便,不用老是打开接端///////////
FILE *pFile2=fopen("D:\\133.jpg","w");
atoi(buffer);
fwrite(buffer,1,16663,pFile2);//这个16663是我测试的图片的长度

fclose(pFile2);
//////////////////////////////下面是关闭scoket.///////////////////


猜想:是不是因为图片的数据用字符型显示?
      不过感觉不是,因为计算机读取保存都是一堆数字,既然保存了后缀,应该是没问题的。

问题2:不会用scoket传结构体,(真是太菜了。。),希望大家赐教。
图片 scoket 套接字 C语言
[解决办法]
估计你发的数据根本不全。

itoa(lenFile,buffer,4);


//有问题。
[解决办法]
先在本机open->read->write 另一文件看看,然后比较两各文件


[解决办法]
    fseek(pFile,0,SEEK_SET);//上面将文件指针重设在文件头部.
    fread(buffer,1,lenFile,pFile);  这里将数据读入“buffer”
    itoa(lenFile,buffer,4);       这里又将“buffer”的头部格式化成文件大小的数字串,还是用“4进制”????itoa的最后一个参数是整数的类型哈
    buffer[lenFile]='\0';
    fclose(pFile);


所以,你还没发送出去的时候,你的图片数据已经被损坏了,不管后面你发送的流程对不对,图片都不能打开的
[解决办法]
如果这样的话,估计的接收的地方是不是有点问题哦,因为你是多次发送,但是是一次写入,会涉及拼接数据,没有代码,你检查下呢。
[解决办法]
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html

热点排行