刚刚学socket
做一个文件传输
现在基本做好了,但传输的文件一直不正确
比如客户的文件是1K,发到服务器就变成30K,实在找不出原因
请大家帮我解决一下,非常感谢
FileCli(客户器端)--->发送文件--->FileSer(服务器端)
从客户端发送文件到服务器文件下载地址
<a href="http://www.namipan.com/d/c011df34b59b03b072fba202db34df30b4c7f33e686e0000">page.rar</a>
做一个文件传输
现在基本做好了,但传输的文件一直不正确
比如客户的文件是1K,发到服务器就变成30K,实在找不出原因
请大家帮我解决一下,非常感谢
FileCli(客户器端)--->发送文件--->FileSer(服务器端)
从客户端发送文件到服务器文件下载地址
<a href="http://www.namipan.com/d/c011df34b59b03b072fba202db34df30b4c7f33e686e0000">page.rar</a>
char sendBuf[100];
char recvBuf[100];
char FrecvBuf[BUFLEN];
char file_name[1024];
int length = 0; while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
sprintf(sendBuf,"Welcome %s:please wait server echo.",
inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
gets(sendBuf);
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
printf("Please Input File Name On Server:\n");
scanf("%s", file_name);
FILE *wbfp = fopen(file_name,"wb");
if(NULL == wbfp )
{
printf("File:%s Can Not Open To Write\n", file_name);
exit(1);
}
memset(FrecvBuf, '\0', sizeof(FrecvBuf));
while(length = recv(sockConn,FrecvBuf,BUFLEN,0))
{
if(length < 0)
{
printf("Recieve Data From Clint Failed!\n");
break;
}
fwrite(FrecvBuf,1, length,wbfp); // 此处有问题
Sleep(1);
memset(FrecvBuf, '\0', sizeof(FrecvBuf));
}
fclose(wbfp);
closesocket(sockConn);
}
FileCli的代码呢?
{
printf("Input Send File Directory.\nexample->c:\\abc.txt\nYours ->");
char FileDirectory[200];
gets(FileDirectory);
FILE * pFile;
int InputNumber=0;
while (1)
{
if (NULL == (pFile = fopen(FileDirectory, "rb")))
{
if(++InputNumber>3)
{
printf("input error. see you later\n");
return true;
}
printf("You will send file no exist. please repeat input:\nYours ->");
gets(FileDirectory);
}
else
break;
}
fseek(pFile, 0, SEEK_END);
long FileSizeBit;
FileSizeBit=ftell(pFile);
rewind(pFile);
long CopyCount;
long ReadBytes;
char * BufSizeMalloc;
if(NULL==(BufSizeMalloc=(char *)malloc(BUFLEN)))
{
printf("Can't allocate more memory\n");
return true;
}
memset(BufSizeMalloc, '\0', sizeof(BufSizeMalloc));
CopyCount = ((FileSizeBit%BUFLEN==0)? (FileSizeBit/BUFLEN):(FileSizeBit%BUFLEN+1));
for (int i = 0; i < CopyCount; i ++)
{
ReadBytes = fread(BufSizeMalloc,1,BUFLEN,pFile);
send(sockClient, (char*)(&ReadBytes), BUFLEN, 0);
Sleep(1);
memset(BufSizeMalloc, '\0', sizeof(BufSizeMalloc));
}
free(BufSizeMalloc);
fclose(pFile);
printf("Send File complete!\n");
return false;
}
这行有错,后面的%应该用/。
这样写更简单:
CopyCount = (FileSizeBit+BUFLEN-1)/BUFLEN;
这行也不对,&ReadBytes应该改成BufSizeMalloc。
send(sockClient, (char*)(BufSizeMalloc), ReadBytes, 0);你的代码中错误还真不少,你该不会是想完全由别人给指出来吧?
?9 s 燡B f:\2.txt 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫? @ € 槛 @?烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫y lcome 127.0.0.1:please wait server echo. 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫? p 烫烫烫烫€ 曩@ ?$ 槛 @?烫烫烫烫烫烫烫烫
------------------文件大小对的,我应该是服务器那里的缓存有问题,可我,调了几次还是没弄出,,,这个问题就难了半天:(是在VC6的环境下测试地
可能length = recv(sockConn,FrecvBuf,BUFLEN,0)这句里有错//FrecvBuf有问题
因为上一句已经初始化了memset(FrecvBuf, '\0', sizeof(FrecvBuf));
不明白
send(sockClient, (char*)(&ReadBytes), BUFLEN, 0);
send(sockClient, (char*)(BufSizeMalloc), ReadBytes, 0);
改成send(sockClient, BufSizeMalloc, ReadBytes, 0);
即可谢谢cnzdgs 你啊