客户端发送文件
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char **argv)
{
ssize_t i=1;
char buf[512];
int fp;
int ret;
int socket_client;
struct sockaddr_in addr_in;
socket_client = socket(AF_INET,SOCK_STREAM,0);//创建套接字
if(socket_client<0){
perror("socket err");
return -1;
}
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(9001);
addr_in.sin_addr.s_addr = inet_addr("192.168.1.77");
ret = connect(socket_client,(struct sockaddr *)&addr_in,sizeof(addr_in));//链接
if(ret<0){
perror("connect err");
return -2;
}
scanf("%s",buf);//写入文件名
ret = send(socket_client,&buf,sizeof(buf),0);//发送文件名
if(ret<0){
perror("send err");
return -11;
}
fp = open(buf,O_RDONLY);//打开要发送的文件
if(fp<0){
fprintf(stderr,"open err\n");
return -1;
}
while(1){
if(i==0){
break;
}
memset(buf,0,sizeof(buf));//空间清0
i = read(fp,buf,sizeof(buf));//读文件到buf
if(i<0){
perror("read err");
return -7;
}else if(i==0){
break;
}
printf("%s\n",buf);//打印一遍用于观察
ret = send(socket_client,buf,sizeof(buf),0);//发送读取到的内容
if(ret<0){
perror("send err");
return -8;
}
printf("%d\n",ret);//打印发送的大小
sleep(1);
}
close(socket_client);
return 0;
}
服务器接收文件
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int aegc,char **argv)
{
char buf[512];
ssize_t i;
int fp;
int ret;
int socket_sever;
int socket_client;
struct sockaddr_in addr_in;
socket_sever = socket(AF_INET,SOCK_STREAM,0);//定义socket套接字
if(socket_sever<0){
perror("socket err");
return -1;
}
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(9001);
addr_in.sin_addr.s_addr = inet_addr("192.168.1.77");
ret = bind(socket_sever,(struct sockaddr *)&addr_in,sizeof(addr_in));//绑定
if(ret<0){
perror("bind err");
return -2;
}
ret = listen(socket_sever,5);//监听
if(ret<0){
perror("listen err");
return -3;
}
socket_client = accept(socket_sever,NULL,NULL);//建立链接
if(socket_client<0){
perror("accept err");
return -4;
}
ret = recv(socket_client,&buf,sizeof(buf),0);//接收文件明
if(ret<0){
perror("recv err");
return -6;
}
fp = open(buf,O_WRONLY | O_CREAT | O_APPEND,0644);//创建并打开文件
if(fp<0){
fprintf(stderr,"open err");
return -1;
}
while(1){
if(i==0){
break;
}
memset(buf,0,sizeof(buf));//接收空间清0
ret = recv(socket_client,buf,sizeof(buf),0);//接收
if(ret<0){
perror("recv err");
return -6;
}else if(ret==0){
break;
}
printf("%s\n",buf);//打印一遍用于观察
i = write(fp,buf,sizeof(buf));//写入打开的文件
if(i<0){
perror("write err");
return -13;
}else if(i==0){
break;}
sleep(1);
}
close(socket_sever);
close(socket_client);
}
问题出现在写入完成后末尾出现连续的^@^@^@^@^@^@^@^@符号,占用空间