【发布时间】:2016-02-17 15:10:07
【问题描述】:
我正在尝试使用 Windows 上的 C++ 程序通过 TCP/IP 发送文件。发送和接收工作正常。但在收到的文件中,每 40 个字符后出现两个逗号。例如,如果我发送:
123456789
123456789
123456789
123456789
123456789
123456789
23456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
接收到的文件是:
123456789
123456789
123456789
123456789
123456789
„123456789
123456789
123456789
123456789
123456789
„123456789
123456789
123456789
123456789
这是发送文件的服务器代码:
static int send_client_file(SOCKET sock, char *Sbuffer){
int n = 0;
char* f_name = "send.txt";
//char* f_name = "server.c";
cout << endl << "Waiting for the client message" << endl;
FILE *fp = fopen(f_name, "r");
if (fp == NULL)
{
cout << "ERROR : File " << f_name << " not found ";
perror("fopen()");
exit(errno);
}
//bzero(Sbuffer, 50); // on vide le buffer d'envoie
memset(Sbuffer, 0, 50);
while((n = fread(Sbuffer, sizeof(char), 50, fp)) > 0)
{
if((n = send(sock, Sbuffer, strlen(Sbuffer), 0)) < 0)
{
perror("send()");
exit(errno);
}
memset(Sbuffer, 0, 50);
}
cout << "file sent" << endl;
return n;
}
这是接收它的客户端代码:
int static recv_server_file(SOCKET sock, char *buffer){
int n = 0;
int m = 0;
cout << endl << "Receiving file from the server..." << endl;
char* f_name = "receive.txt";
FILE *fp = fopen(f_name, "a");
if (fp == NULL)
{
cout << "ERROR : File " << f_name << "not found " << endl;
perror("fopen()");
exit(errno);
}
else {
while(n = recv(sock, buffer, Rbuffer_size, 0))
{
if (n < 0)
{
perror("recv()");
exit(errno);
}
m = fwrite(buffer, sizeof(char), n, fp);
if(m < n)
{
cout << "File write failed." << endl;
break;
}
break;
memset(buffer, '/0', Rbuffer_size);
}
cout << "ok!" << endl;
fclose(fp);
}
cout << "The received data is : " << buffer << endl ;
return m;
}
如您所见,接收文件中出现了“,”。知道如何解决这个问题吗?
【问题讨论】:
-
您需要发送代码 sn-ps 说明您的操作方式。
-
在windows下使用fiddler来调查实际发送的内容。
-
简短的回答是:停止发送它们。 TCP 是一个可靠的、有序的流,所以它是在你的代码中意外地放入逗号的东西。没有代码 sn-p,我们无话可说。
-
@Brian 我添加了代码。
-
@NicolasHolthaus 添加了代码
标签: c++ tcp client-server tcp-ip