云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 使用socket的Linux上的C语言文件传输顺序服务器和客户端示例程序

使用socket的Linux上的C语言文件传输顺序服务器和客户端示例程序

  • 62 次阅读
  • 3 次下载
  • 2025/5/5 21:40:40

使用socket的Linux上的C语言文件传输顺序服务器和客户端示例程序 服务器端程序的编译

gcc -o file_server file_server.c 客户端程序的编译

gcc -o file_client file_client.c

服务器程序和客户端程应当分别运行在2台计算机上. 服务器端程序的运行,在一个计算机的终端执行 ./file_server

客户端程序的运行,在另一个计算机的终端中执行 ./file_client 运行服务器程序的计算机的IP地址

根据提示输入要传输的服务器上的文件,该文件在服务器的运行目录上

在实际编程和测试中,可以用2个终端代替2个计算机,这样就可以在一台计算机上测试网络程序,

服务器端程序的运行,在一个终端执行 ./file_server

客户端程序的运行,在另一个终端中执行 ./file_client 127.0.0.1

说明: 任何计算机都可以通过127.0.0.1访问自己. 也可以用计算机的实际IP地址代替127.0.0.1

////////////////////////////////////////////////////////////////////////////////////// // file_server.c 文件传输顺序服务器示例

////////////////////////////////////////////////////////////////////////////////////// //本文件是服务器的代码

#include // for sockaddr_in #include // for socket #include // for socket #include // for printf #include // for exit #include // for bzero /*

#include #include #include #include */

#define HELLO_WORLD_SERVER_PORT 6666 #define LENGTH_OF_LISTEN_QUEUE 20 #define BUFFER_SIZE 1024

#define FILE_NAME_MAX_SIZE 512

int main(int argc, char **argv) {

//设置一个socket地址结构server_addr,代表服务器internet地址, 端口 struct sockaddr_in server_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 int server_socket = socket(PF_INET,SOCK_STREAM,0); if( server_socket < 0) {

printf(\ exit(1); }

//把socket和socket地址结构联系起来

if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr))) {

printf(\ exit(1); }

//server_socket用于监听

if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) ) {

printf(\ exit(1); }

while (1) //服务器端要一直运行 {

//定义客户端的socket地址结构client_addr struct sockaddr_in client_addr;

socklen_t length = sizeof(client_addr);

//接受一个到server_socket代表的socket的一个连接

//如果没有连接请求,就等待到有连接请求--这是accept函数的特性

//accept函数返回一个新的socket,这个socket(new_server_socket)用于同连接到的客户的通信

//new_server_socket代表了服务器和客户端之间的一个通信通道

//accept函数把连接到的客户端信息填写到客户端的socket地址结构client_addr中 int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length); if ( new_server_socket < 0) {

printf(\ break; }

char buffer[BUFFER_SIZE]; bzero(buffer, BUFFER_SIZE);

length = recv(new_server_socket,buffer,BUFFER_SIZE,0); if (length < 0) {

printf(\ break; }

char file_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)); // int fp = open(file_name, O_RDONLY); // if( fp < 0 )

FILE * fp = fopen(file_name,\ if(NULL == fp ) {

printf(\ } else {

bzero(buffer, BUFFER_SIZE); int file_block_length = 0;

// while( (file_block_length = read(fp,buffer,BUFFER_SIZE))>0)

while( (file_block_length = fread(buffer,sizeof(char),BUFFER_SIZE,fp))>0) {

printf(\

//发送buffer中的字符串到new_server_socket,实际是给客户端 if(send(new_server_socket,buffer,file_block_length,0)<0) {

printf(\ break; }

bzero(buffer, BUFFER_SIZE); }

// close(fp); fclose(fp);

printf(\ }

//关闭与客户端的连接 close(new_server_socket); }

//关闭监听用的socket

close(server_socket); return 0; }

////////////////////////////////////////////////////////////////////////////////////// // file_client.c 文件传输客户端程序示例

////////////////////////////////////////////////////////////////////////////////////// //本文件是客户机的代码

#include // for sockaddr_in #include // for socket #include // for socket #include // for printf #include // for exit #include // for bzero /*

#include #include #include #include */

#define HELLO_WORLD_SERVER_PORT 6666 #define BUFFER_SIZE 1024

#define FILE_NAME_MAX_SIZE 512

int main(int argc, char **argv) {

if (argc != 2) {

printf(\ exit(1); }

//设置一个socket地址结构client_addr,代表客户机internet地址, 端口 struct sockaddr_in client_addr;

bzero(&client_addr,sizeof(client_addr)); //把一段内存区的内容全部设置为0 client_addr.sin_family = AF_INET; //internet协议族

client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY表示自动获取本机地址

client_addr.sin_port = htons(0); //0表示让系统自动分配一个空闲端口 //创建用于internet的流协议(TCP)socket,用client_socket代表客户机socket int client_socket = socket(AF_INET,SOCK_STREAM,0); if( client_socket < 0) {

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

使用socket的Linux上的C语言文件传输顺序服务器和客户端示例程序 服务器端程序的编译 gcc -o file_server file_server.c 客户端程序的编译 gcc -o file_client file_client.c 服务器程序和客户端程应当分别运行在2台计算机上. 服务器端程序的运行,在一个计算机的终端执行 ./file_server 客户端程序的运行,在另一个计算机的终端中执行 ./file_client 运行服务器程序的计算机的IP地址 根据提示输入要传输的服务器上的文件,该文件在服务器的运行目录上 在实际编程和测试中,可以用2个终端代替2个计算机,这样就可以在一台计算机上测试网络程序, 服务器端程序的运行,在一个终端执行 ./file_server <

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com