69,373
社区成员
发帖
与我相关
我的任务
分享
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MYPORT 1029
#define BUFFERSIZE 1024
int main(int argc,char **argv)
{
if(argc!=2)
{
printf("argc<2\n");
exit(1);
}
struct sockaddr_in client_addr;
bzero(&client_addr,sizeof(client_addr));
client_addr.sin_family=AF_INET;
client_addr.sin_addr.s_addr=htons(INADDR_ANY);
client_addr.sin_port=htons(0);
int client_socket=socket(AF_INET,SOCK_STREAM,0);
if(client_socket<0)
{
printf("Create Socket Failed!\n");
exit(1);
}
if(bind(client_socket,(struct sockaddr *)&client_addr,sizeof(client_addr)))
{
printf("Client Bind Port Failed!\n");
exit(1);
}
struct sockaddr_in server_addr;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
if(inet_aton(argv[1],&server_addr.sin_addr)==0)
{
printf("Server IP Address Error!\n");
exit(1);
}
server_addr.sin_port=htons(MYPORT);
socklen_t server_addr_length=sizeof(server_addr);
if(connect(client_socket,(struct sockaddr *)&server_addr,server_addr_length)<0)
{
printf("Can Not Connect To %s!\n",argv[1]);
exit(1);
}
char buf[BUFFERSIZE];
FILE *fp_1=fopen("send.xml","r");
if(fp_1==NULL)
{
printf("File not found!\n");
}
else
{
bzero(buf,BUFFERSIZE);
int file_block_length=0;
while((file_block_length=fread(buf,sizeof(char),BUFFERSIZE,fp_1))>0)
{
printf("flie_block_length=%d\n",file_block_length);
if(send(client_socket,buf,file_block_length,0)<0)
{
printf("Send file failed!\n");
break;
}
bzero(buf,sizeof(buf));
}
fclose(fp_1);
printf("Finished!\n");
}
FILE *fp=fopen("test.xml","w");
if(fp==NULL)
{
printf("Can Not Open To Write!\n");
exit(1);
}
bzero(buf,sizeof(buf));
int length=0;
while(length=recv(client_socket,buf,BUFFERSIZE,0))
{
if(length<0)
{
printf("Receive Data Failed!\n");
break;
}
int write_length=fwrite(buf,sizeof(char),length,fp);
if(write_length<length)
{
printf("Write Failed!\n");
break;
}
bzero(buf,BUFFERSIZE);
}
printf("Success!\n");
fclose(fp);
close(client_socket);
return 0;
}
int length=0;
while(true)
{
length=recv(client_socket,buf,BUFFERSIZE,0)
if(length==0)
{
printf("socket closed!\n");
break;
}
if(length<0)
{
printf("Receive Data Failed!\n");
break;
}
int write_length=fwrite(buf,sizeof(char),length,fp);
if(write_length<length)
{
printf("Write Failed!\n");
break;
}
bzero(buf,BUFFERSIZE);
}
服务端我接触不到。
[quote=引用 36 楼 zilaishuichina 的回复:] [quote=引用 35 楼 Zidane_2014 的回复:] [quote=引用 30 楼 zilaishuichina 的回复:] [quote=引用 29 楼 Zidane_2014 的回复:] [quote=引用 25 楼 mymtom 的回复:] 查下少了哪个字节啊,这样可以帮助判断错误的原因。
少一个字节 少的是什么? 是最后一个‘〉’么? 是不是任意一个文件都是少最后这个字符?
跟本就没有EOF这个字符,EOF只是函数的返回值而已,如果少了一个字符,可能是少了'\r'之类的,建议LZ把文件内容用16进制的方式打印出来,这样看的最清楚,到底少了什么。
你在服务器端,也保存一个文件看看,是同样少字节还是完整的。要是完整的就把服务器端的接收代码改改弄到客户端。要还出错,那服务器端发送就有问题了
[quote=引用 35 楼 Zidane_2014 的回复:] [quote=引用 30 楼 zilaishuichina 的回复:] [quote=引用 29 楼 Zidane_2014 的回复:] [quote=引用 25 楼 mymtom 的回复:] 查下少了哪个字节啊,这样可以帮助判断错误的原因。
少一个字节 少的是什么? 是最后一个‘〉’么? 是不是任意一个文件都是少最后这个字符?
跟本就没有EOF这个字符,EOF只是函数的返回值而已,如果少了一个字符,可能是少了'\r'之类的,建议LZ把文件内容用16进制的方式打印出来,这样看的最清楚,到底少了什么。
[quote=引用 30 楼 zilaishuichina 的回复:] [quote=引用 29 楼 Zidane_2014 的回复:] [quote=引用 25 楼 mymtom 的回复:] 查下少了哪个字节啊,这样可以帮助判断错误的原因。
少一个字节 少的是什么? 是最后一个‘〉’么? 是不是任意一个文件都是少最后这个字符?
跟本就没有EOF这个字符,EOF只是函数的返回值而已,如果少了一个字符,可能是少了'\r'之类的,建议LZ把文件内容用16进制的方式打印出来,这样看的最清楚,到底少了什么。
[quote=引用 29 楼 Zidane_2014 的回复:] [quote=引用 25 楼 mymtom 的回复:] 查下少了哪个字节啊,这样可以帮助判断错误的原因。
少一个字节 少的是什么? 是最后一个‘〉’么? 是不是任意一个文件都是少最后这个字符?
跟本就没有EOF这个字符,EOF只是函数的返回值而已,如果少了一个字符,可能是少了'\r'之类的,建议LZ把文件内容用16进制的方式打印出来,这样看的最清楚,到底少了什么。