使用socket的Linux上的C语言文件传输顺序服务器和客户端示例程序Word文件下载.doc
- 文档编号:15249903
- 上传时间:2022-10-28
- 格式:DOC
- 页数:6
- 大小:53KB
使用socket的Linux上的C语言文件传输顺序服务器和客户端示例程序Word文件下载.doc
《使用socket的Linux上的C语言文件传输顺序服务器和客户端示例程序Word文件下载.doc》由会员分享,可在线阅读,更多相关《使用socket的Linux上的C语言文件传输顺序服务器和客户端示例程序Word文件下载.doc(6页珍藏版)》请在冰豆网上搜索。
./file_client127.0.0.1
说明:
任何计算机都可以通过127.0.0.1访问自己.也可以用计算机的实际IP地址代替127.0.0.1
//////////////////////////////////////////////////////////////////////////////////////
//file_server.c文件传输顺序服务器示例
//本文件是服务器的代码
#include<
netinet/in.h>
//forsockaddr_in
sys/types.h>
//forsocket
sys/socket.h>
stdio.h>
//forprintf
stdlib.h>
//forexit
string.h>
//forbzero
/*
sys/stat.h>
fcntl.h>
unistd.h>
*/
#defineHELLO_WORLD_SERVER_PORT6666
#defineLENGTH_OF_LISTEN_QUEUE20
#defineBUFFER_SIZE1024
#defineFILE_NAME_MAX_SIZE512
intmain(intargc,char**argv)
{
//设置一个socket地址结构server_addr,代表服务器internet地址,端口
structsockaddr_inserver_addr;
bzero(&
server_addr,sizeof(server_addr));
//把一段内存区的内容全部设置为0
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htons(INADDR_ANY);
server_addr.sin_port=htons(HELLO_WORLD_SERVER_PORT);
//创建用于internet的流协议(TCP)socket,用server_socket代表服务器socket
intserver_socket=socket(PF_INET,SOCK_STREAM,0);
if(server_socket<
0)
{
printf("
CreateSocketFailed!
"
);
exit
(1);
}
//把socket和socket地址结构联系起来
if(bind(server_socket,(structsockaddr*)&
server_addr,sizeof(server_addr)))
ServerBindPort:
%dFailed!
HELLO_WORLD_SERVER_PORT);
//server_socket用于监听
if(listen(server_socket,LENGTH_OF_LISTEN_QUEUE))
ServerListenFailed!
while
(1)//服务器端要一直运行
//定义客户端的socket地址结构client_addr
structsockaddr_inclient_addr;
socklen_tlength=sizeof(client_addr);
//接受一个到server_socket代表的socket的一个连接
//如果没有连接请求,就等待到有连接请求--这是accept函数的特性
//accept函数返回一个新的socket,这个socket(new_server_socket)用于同连接到的客户的通信
//new_server_socket代表了服务器和客户端之间的一个通信通道
//accept函数把连接到的客户端信息填写到客户端的socket地址结构client_addr中
intnew_server_socket=accept(server_socket,(structsockaddr*)&
client_addr,&
length);
if(new_server_socket<
{
printf("
ServerAcceptFailed!
\n"
break;
}
charbuffer[BUFFER_SIZE];
bzero(buffer,BUFFER_SIZE);
length=recv(new_server_socket,buffer,BUFFER_SIZE,0);
if(length<
ServerRecieveDataFailed!
charfile_name[FILE_NAME_MAX_SIZE+1];
bzero(file_name,FILE_NAME_MAX_SIZE+1);
strncpy(file_name,buffer,strlen(buffer)>
FILE_NAME_MAX_SIZE?
FILE_NAME_MAX_SIZE:
strlen(buffer));
//intfp=open(file_name,O_RDONLY);
//if(fp<
0)
FILE*fp=fopen(file_name,"
r"
if(NULL==fp)
File:
\t%sNotFound\n"
file_name);
else
bzero(buffer,BUFFER_SIZE);
intfile_block_length=0;
//while((file_block_length=read(fp,buffer,BUFFER_SIZE))>
0)
while((file_block_length=fread(buffer,sizeof(char),BUFFER_SIZE,fp))>
{
printf("
file_block_length=%d\n"
file_block_length);
//发送buffer中的字符串到new_server_socket,实际是给客户端
if(send(new_server_socket,buffer,file_block_length,0)<
{
printf("
SendFile:
\t%sFailed\n"
break;
}
bzero(buffer,BUFFER_SIZE);
}
//close(fp);
fclose(fp);
\t%sTransferFinished\n"
file_name);
//关闭与客户端的连接
close(new_server_socket);
//关闭监听用的socket
close(server_socket);
return0;
}
//file_client.c文件传输客户端程序示例
//本文件是客户机的代码
#defineHELLO_WORLD_SERVER_PORT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 socket Linux 语言 文件传输 顺序 服务器 客户端 示例 程序