当前位置: 技术问答>linux和unix
网络编程...传输后有乱码? 这2个程序哪里错了呢? 大虾帮帮。。关于文件传输方面的
来源: 互联网 发布时间:2016-07-12
本文导语: /*服务器端程序server0.c*/ while(1) { /* 服务器阻塞,直到客户程序建立连接 */ sin_size=sizeof(struct sockaddr_in); if((new_fd=accept(sockfd,(struct sockaddr*)(&client_addr),&sin_size))==-1) { fprintf(stderr,"Accept error...
/*服务器端程序server0.c*/
while(1)
{
/* 服务器阻塞,直到客户程序建立连接 */
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr*)(&client_addr),&sin_size))==-1)
{
fprintf(stderr,"Accept error:%sna",strerror(errno));
exit(1);
}
/* 可以在这里加上自己的处理函数 */
fp=fopen("test.txt","r");
if(fp==NULL) {printf("Open Error."); exit(1);}
while(fread(szStr,1,1024,fp))
{
printf("%sn",szStr);
}
if(send(new_fd,szStr,strlen(szStr),0)==-1)
{
fprintf(stderr,"Write Error:%sn",strerror(errno));
exit(0);
}
/* 这个通信已经结束*/
close(new_fd);
close(fp);
/* 循环下一个*/
}
close(sockfd);
exit(0);
}
/*客户端程序client0*/
/*连接成功*/
if((nbytes=recv(sockfd,buffer,RECVBUFSIZE,0))==-1)
{
fprintf(stderr,"Read Error:%sn",strerror(errno));
exit(1);
}
buffer[nbytes]='';
printf("I have received: %sn",buffer);
fp2=fopen("Test.txt","w+");
fwrite(buffer,sizeof(char),strlen(buffer),fp2);
close(fp2);
/* 结束通讯 */
close(sockfd);
exit(0);
}
我只把他们连接成功后的程序发出来了,意思是服务器段读取一个文件(test.txt),将文件读取后(szStr)发给客户端,客户端接收传过来的文件内容存在(buffer)里,fp2创建一个新文件(Test.txt),fwrite将传过来的内容保存在一个文件(Test.txt)里。
这段文件开头是我直接复制的另外程序的,连接成功以后的内容使我自己改的,问题是:
在服务器端程序里面定义时候有句 char hello[]="Hello!Socket communication world!n";
这句我2个程序里面根本都没用到,但是这句去掉后Test.txt文件里面有乱码,不去掉的话就正常(不过好像结果多了一行空的出来)。太奇怪了,上面这2段程序哪里有问题吗?
test.txt的内容是
abcdefg
1234567
如果char hello[]="Hello!Socket communication world!n";不去掉运行
Test.txt内容是
abcdefg
1234567
去掉 char hello[]="Hello!Socket communication world!n";运行的话
Test.txt内容是
abcdefg
1234567
�fݿ�b���%���"��lgݿ
这个到底是什么原因呢? 谁帮下哦,我把服务器和客户完整程序发回复里
while(1)
{
/* 服务器阻塞,直到客户程序建立连接 */
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr*)(&client_addr),&sin_size))==-1)
{
fprintf(stderr,"Accept error:%sna",strerror(errno));
exit(1);
}
/* 可以在这里加上自己的处理函数 */
fp=fopen("test.txt","r");
if(fp==NULL) {printf("Open Error."); exit(1);}
while(fread(szStr,1,1024,fp))
{
printf("%sn",szStr);
}
if(send(new_fd,szStr,strlen(szStr),0)==-1)
{
fprintf(stderr,"Write Error:%sn",strerror(errno));
exit(0);
}
/* 这个通信已经结束*/
close(new_fd);
close(fp);
/* 循环下一个*/
}
close(sockfd);
exit(0);
}
/*客户端程序client0*/
/*连接成功*/
if((nbytes=recv(sockfd,buffer,RECVBUFSIZE,0))==-1)
{
fprintf(stderr,"Read Error:%sn",strerror(errno));
exit(1);
}
buffer[nbytes]='';
printf("I have received: %sn",buffer);
fp2=fopen("Test.txt","w+");
fwrite(buffer,sizeof(char),strlen(buffer),fp2);
close(fp2);
/* 结束通讯 */
close(sockfd);
exit(0);
}
我只把他们连接成功后的程序发出来了,意思是服务器段读取一个文件(test.txt),将文件读取后(szStr)发给客户端,客户端接收传过来的文件内容存在(buffer)里,fp2创建一个新文件(Test.txt),fwrite将传过来的内容保存在一个文件(Test.txt)里。
这段文件开头是我直接复制的另外程序的,连接成功以后的内容使我自己改的,问题是:
在服务器端程序里面定义时候有句 char hello[]="Hello!Socket communication world!n";
这句我2个程序里面根本都没用到,但是这句去掉后Test.txt文件里面有乱码,不去掉的话就正常(不过好像结果多了一行空的出来)。太奇怪了,上面这2段程序哪里有问题吗?
test.txt的内容是
abcdefg
1234567
如果char hello[]="Hello!Socket communication world!n";不去掉运行
Test.txt内容是
abcdefg
1234567
去掉 char hello[]="Hello!Socket communication world!n";运行的话
Test.txt内容是
abcdefg
1234567
�fݿ�b���%���"��lgݿ
这个到底是什么原因呢? 谁帮下哦,我把服务器和客户完整程序发回复里
|
你又跑这里来开个帖子。
写入的buffer大小没控制好。
hello那个变量却是没用,它顶替了你未初始化的地方。
我再仔细看看你的代码。
写入的buffer大小没控制好。
hello那个变量却是没用,它顶替了你未初始化的地方。
我再仔细看看你的代码。
|
对,应该是buffer大小的问题。szStr这个得初始化一下,否则后面就有随机的乱码了。