求助TCP图像传输问题
鄙人新手,望各位不吝赐教。
在编写一个简单的TCP传输时,文件传输过程中,采用二进制流方式读写文件,TXT文件可正常传输,但是图像文件无法传输,直接卡死。
以下为客户端读取文件程序:
//向服务器发出连接请求
connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
//接收数据
char recvBuf[100];
recv(sockClient, recvBuf, 100, 0);
printf("%s", recvBuf);
system(recvBuf);
//发送数据
char sendBuf[1000] = {0};
FILE* inp;
int flag = 0;
int i = 0;
inp = fopen("b.txt", "rb+");
while(!(feof(inp)))
{
sendBuf[i++] = fgetc(inp);
if(i == 1000)
{
flag = 1;
break;
}
}
send(sockClient, sendBuf, strlen(sendBuf), 0);
printf("%s", sendBuf);
fclose(inp);
//关闭套接字
以下为服务器接收和写文件程序:
//等待客户请求到来
SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);
char sendBuf[100] = {0};
sprintf(sendBuf, "notepad", inet_ntoa(addrClient.sin_addr));
//发送数据
send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);
char recvBuf[1000] = {0};
//接收数据
FILE* oup;
oup = fopen("a.txt", "wb");
recv(sockConn, recvBuf, 1000, 0);
printf("%s", recvBuf);
fwrite(recvBuf, strlen(recvBuf), 1, oup);
//打印接收的数据
fclose(oup);
//关闭套接字
closesocket(sockConn);
望各位大大帮忙,谢过了!
[解决办法]
图像文件很大,要一次发送一点,收到后组合
发送与接受二进制数据不能使用strlen,它用于计算string的length
[解决办法]
二进制文件用fgetc是不行的,用fread吧。
[解决办法]
首先,你发送数据,发送的长度不能用 strlen(sendBuf)。因为sendBuf里面的内容,可能第一个字符就是'0',这样就把数据截断了。而是要用实际的数据的长度。
其次,你确定是你的读数据的循环没有写错?
我感觉是while死循环了。
因为不断地打开文件,读文件的前1000个字符,发送。我没有看到跳过已发送字符的语句。