第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/8/21 18:20:06 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

使用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) {

使用socket的Linux上的C语言文件传输顺序服务器和客户端示例程序.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4g2sg4a4ay8wrp7237xd_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top