易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
软件资源
软件开发
、
小程序制作
、
系统集成与运维
、
空间租用
、
硬件开发
、
视频监控
、
技术咨询与支持
——联系电话:0311-88999002/88999003
首页
/
操作系统
/
Linux
/
Linux下基于TCP的文件传输
服务器:
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define SERVER_PORT 6666
#define LISTEN_QUEUE 20
#define BUFFER_SIZE 1024
int
main(
int
argc,
char
**argv)
{
struct
sockaddr_in server_addr;
bzero(&server_addr,
sizeof
(server_addr));
//全部置零
//设置地址相关的属性
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htons(INADDR_ANY);
server_addr.sin_port=htons(SERVER_PORT);
//创建套接字
int
server_socket=socket(AF_INET,SOCK_STREAM,0);
if
(server_socket<0)
{
printf(
"socket create error "
);
exit(1);
}
//绑定端口
if
(bind(server_socket,(
struct
sockaddr*)&server_addr,
sizeof
(server_addr)))
{
printf(
"bind error "
);
exit(1);
}
//服务器端监听
if
(listen(server_socket,LISTEN_QUEUE))
{
printf(
"Server listen error "
);
exit(1);
}
//服务器端一直运行
while
(1)
{
pid_t pid;
struct
sockaddr_in client_addr;
socklen_t length=
sizeof
(client_addr);
//accept返回一个新的套接字与www.linuxidc.com客户端进行通信
int
new_server_socket=accept(server_socket,(
struct
sockaddr*)&client_addr,&length);
//1*begin******************************************************************************
if
(new_server_socket==-1)
{
printf(
"accept error "
);
continue
;
}
else
{
printf(
"客户端%s连接成功 "
,inet_ntoa(client_addr.sin_addr));
pid=fork();
//3*begin**运行子进程*************************************************************
if
(pid==0)
{
int
data_len,flag=0;
char
buffer[BUFFER_SIZE];
// 定义文件流
FILE
*stream;
bzero(buffer,BUFFER_SIZE);
strcpy(buffer,
"请输入要传输的文件的完整路径:"
);
strcat(buffer,
" "
);
send(new_server_socket,buffer,BUFFER_SIZE,0);
bzero(buffer,BUFFER_SIZE);
//2*begin**服务器接受数据*********************************************
if
((stream=fopen(
"data"
,
"w"
))==NULL)
{
printf(
"file open error "
);
exit(1);
}
else
{
bzero(buffer,BUFFER_SIZE);
}
// printf("正在接收来自%s的文件.... ",inet_ntoa(client_addr.sin_addr));
//先将数据接受到缓冲区buffer中,再写入到新建的文件中
while
(data_len=recv(new_server_socket,buffer,BUFFER_SIZE,0))
{
flag++;
if
(flag==1)
{
printf(
"正在接收来自%s的文件.... "
,inet_ntoa(client_addr.sin_addr));
}
if
(data_len<0)
{
printf(
"接收错误 "
);
exit(1);
}
//向文件中写入数据
int
write_len=fwrite(buffer,
sizeof
(
char
),data_len,stream);
if
(write_len>data_len)
{
printf(
"file write failed "
);
exit(1);
}
bzero(buffer,BUFFER_SIZE);
}
if
(flag>0)
printf(
"%s的文件传送完毕 "
,inet_ntoa(client_addr.sin_addr));
if
(flag==0)
printf(
"%s的文件传输失败 "
,inet_ntoa(client_addr.sin_addr));
//2*end**服务器接受数据****************************************************
// rename("data",inet_ntoa(client_addr.sin_addr));
fclose(stream);
rename(
"data"
,inet_ntoa(client_addr.sin_addr));
exit(1);
}
//3*end**运行子进程**********************************************************
else
{
close(new_server_socket);
}
}
//1*end**************************************************************************************
close(new_server_socket);
}
return
0;
}
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图