-
Linux
下基于
Tcp
的文件传输
一.服务器:
#include
#include
#include
#include
#include
#include
#include
#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_a
ddr,sizeof(server_addr));//
全部置零
< br>
//
设置地址相关的属性
server__family=AF_INET;
server__addr.s_addr=htons(INADDR_ANY);
server__port=htons(SERVER_PORT);
//
创建套接字
int
server_socket=socket(AF_INET,SOCK_STREAM,0);
if(server_socket<0)
{
printf(
exit(1);
}
//
绑定端口
if(bind(server_socket,(struct
sockaddr*)&server_addr,sizeof(server_addr)))
{
printf(
exit(1);
}
//
服务器端监听
if(listen(server_socket,LISTEN_QUEUE))
{
printf(
exit(1);
}
//
服务器端一直运行
while(1)
{
pid_t pid;
struct sockaddr_in client_addr;
socklen_t
length=sizeof(client_addr);
p>
//accept
返回一个新的套接字与客户端进行通信
int
new_server_socket=accept(server_socket,(struct
sockaddr*)&client_addr,&length);
//1*begin************************************
*********************
******************
***
if(new_server_socket==-1)
{
printf(
continue;
}
else
{
printf(
客户端
%s
连接成功
n
pid=fork();
//3*
begin**
运行子进程
****************
*********************************************
if(pid==0)
{
int
data_len,flag=0;
char buffer[BUFFER_SIZE];
//
定义文件流
FILE *stream;
bzero(buffer,BUFFER_SIZE);
strcpy(buffer,<
/p>
请输入要传输的文件的完整路径:
strcat(buffer,
send(new_server_socket,buff
er,BUFFER_SIZE,0);
bzero(buffer,BUFFER_SIZE);
//2*begin**
服务器接受数据
*********************************************
if((stream=fopen(
{
printf(
exit(1);
}
else
{
bzero(buffer,BUFFER_SIZE);
}
// printf(
正在接收来自
%s
的文
件
....n
//
先将数据接受到缓冲区
buffer
中,再写入到新建的文件中
whi
le(data_len=recv(new_server_socket,buffer,BUFFER_S
IZE,0))
{
flag++;
if(flag==1)
{
printf(
< br>正在接收来自
%s
的文
件
....n
}
if(data_len<0)
{
p>
printf(
接收错误
n
exit(1);
}
//
向文件中写入数据
int write_len=f
write(buffer,sizeof(char),data_len,stream);
if(write_len>data_len)
{
printf(
exit(1);
}
bzero(buffer,BUFFER_SIZE);
}
if(flag>0)
printf(
的文件传送完毕
p>
n
if(flag==0)
pri
ntf(
的文件传输失败
n
//2*e
nd**
服务器接受数据
*****************
***********************************
// rename(
fclose(stream);
rename(
exit(1);
}
//3*end**
运行子进程<
/p>
****************************************
******************
-
-
-
-
-
-
-
-
-
上一篇:考研阅读高频同义替换词汇总
下一篇:AE 特效 Effect菜单中英文对照