专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C++ Builder

基于TCP的文件传输有关问题:普通TXT文件传输没有有关问题,但图片传输有有关问题。求高手解答

发布时间:2011-06-28 11:58:58 文章来源:www.iduyao.cn 采编人员:星星草
基于TCP的文件传输问题:普通TXT文件传输没有问题,但图片传输有问题。求高手解答!
闲话不多先上代码
服务器:
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32.lib")

int main(int argc, char* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) 
{
return -1;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return -1; 
}
unsigned int fs=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addr_server;
addr_server.sin_family=AF_INET;
addr_server.sin_port=htons(9856);
addr_server.sin_addr.S_un.S_addr=inet_addr("172.18.23.22");

err=bind(fs,((SOCKADDR*)&addr_server),sizeof(SOCKADDR_IN));
if(err!=0)
{
printf("绑定地址出错!");
return -1;
}
else
printf("绑定成功\n");
while(1)
{
printf("等待连接\n");
listen(fs,5);
int len=sizeof(SOCKADDR_IN);
unsigned int connfs=accept(fs,(SOCKADDR*)&addr_server,&len);
TCHAR buf[4000];
memset(buf,0,4000);
recv(connfs,buf,4000,0);
TCHAR name[255];
// int len;
memset(name,0,255);
sscanf(buf,"文件名:%s\t大小为:%d",name,&len);
printf("%d\n",len);
FILE *fp=_wfopen(name,"wb");
send(connfs,"ok!",strlen("ok!"),0);
while (1) 
{
memset(buf,0,4000);
err=recv(connfs,buf,4000,0);
if(SOCKET_ERROR == err)
break;
fwrite(buf,1,strlen(buf),fp);
send(connfs,"ok!",strlen("ok!"),0);
}
printf("文件接收完成!");
fclose(fp);
closesocket(connfs);
}
closesocket(fs);
return 0;
}

客服端核心代码:
	
//while (1)//循环连接直到成功
//{
// if(InitSocket())
// break;
///}
TCHAR  buf[4000];
FILE *FP=fopen("d://1.zip","rb");
if (FP==NULL)
{
MessageBox("没有该文件!");
closesocket(m_Socket_Fs);
return ;
}
fseek(FP,0,SEEK_END);
int len=ftell(FP);
if(len==-1)
{
MessageBox("文件发送错误!");
return ;
}
memset(buf,0,4000);
sprintf(buf,"文件名:1.zip\t大小为:%d",len);
send(m_Socket_Fs,buf,strlen(buf)+1,0);//发送文件名与文件大小
fseek(FP,0,SEEK_SET);
while(!feof(FP))//发送文件内容
{
len=recv(m_Socket_Fs,buf,254,0);
if(len==SOCKET_ERROR)
break;
memset(buf,0,4000);
fread(buf,1,3999,FP);
send(m_Socket_Fs,buf,strlen(buf)+1,0);//发送文件内容
Sleep(1);
}
fclose(FP);
closesocket(m_Socket_Fs);




╮(╯▽╰)╭,搞IT的伤不起啊,搞IT的菜鸟更伤不起啊,搞IT的还没毕业的伤不起啊!
------最佳解决方案--------------------
strlen(buf)
不是字符串不能这样计算长度
------其他解决方案--------------------
晕..."带有结束符的字符串长度"

你这根本就不是字符串了,读取文件的时候判断读到的大小吧

len = fread(buf,1,4000,FP) ;

len是实际读出的字节数,返回0时表示文件已经读完.
------其他解决方案--------------------
能具体点不,应怎么计算长度!还有这怎么不是字符串了?
引用:
strlen(buf)
不是字符串不能这样计算长度

------其他解决方案--------------------
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: