Linux项目:文件传输
2021/11/11 7:13:28
本文主要是介绍Linux项目:文件传输,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
11_6
文件传输:在两台计算机之间进行文件的传递
客户端与服务器连接,客户端与服务器端不在同一个主机之上,要求客户端可以查看服务器端有哪些文件,删除文件,移动文件,归类文件,增添文件夹;下载文件;上传文件,断点续传。
几乎所有的服务器端程序都会有配置文件
自定义文件
(1)socket_info.conf
1 # 2 # 3 4 #ip地址 5 ips=127.0.0.1 6 7 #端口 8 port=6000 9 10 #监听队列大小 11 lismax=5
(2)ser.c
#include "sock_init.h" #include "work_thread.h" int main() { int sockfd = socket_init(); if ( sockfd == -1 ) { printf("ser create sockfd failed\n"); exit(0); } while( 1 ) { struct sockaddr_in caddr; int len = sizeof(caddr); int c = accept(sockfd,(struct sockaddr*)&caddr,&len); if ( c < 0 ) { continue; } printf("accept c=%d\n",c); thread_start(c); } }
(3)makefile
all: ser ser : ser.o sock_init.o work_thread.o gcc -o ser ser.o sock_init.o work_thread.o -lpthread ser.o : ser.c gcc -c ser.c sock_init.o : sock_init.c gcc -c sock_init.c work_thread.o: work_thread.c gcc -c work_thread.c clean: rm -f *.o ser
(4)sock_init.h
#ifndef __SOCK_INIT #define __SOCK_INIT #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> int socket_init(); #endif
(5)sock_init.c
#include "sock_init.h" #define IPS "ips=" #define PORT "port=" #define LISMAX "lismax=" struct sock_info { char ips[32]; short port; int lismax; }; int read_sock_conf(struct sock_info * dt) { if ( dt == NULL ) { return -1; } FILE * fp = fopen("socket_info.conf","r"); if ( fp == NULL ) { printf("open socket_info.conf failed\n"); return -1; } int index = 0; while( 1 ) { char buff[128] = {0}; char * s = fgets(buff,128,fp); if ( s == NULL ) { break; } index++; if ( s[0] == '#' || s[0] == '\n' ) { continue; } s[strlen(s)-1] = '\0'; if ( strncmp(s,IPS,strlen(IPS)) == 0 ) { strcpy(dt->ips,s+strlen(IPS)); } else if ( strncmp(s,PORT,strlen(PORT)) == 0 ) { dt->port = atoi(s+strlen(PORT)); } else if ( strncmp(s,LISMAX,strlen(LISMAX)) == 0 ) { dt->lismax=atoi(s+strlen(LISMAX)); } else { printf("不识别的参数:line %d\n",index); } } fclose(fp); return 0; } int socket_init() { struct sock_info data; if ( read_sock_conf(&data) == -1 ) { return -1; } printf("ip=%s\n",data.ips); printf("port=%d\n",data.port); printf("lismax=%d\n",data.lismax); int sockfd = socket(AF_INET,SOCK_STREAM,0); if ( sockfd == -1 ) { return -1; } struct sockaddr_in saddr; memset(&saddr,0,sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_port = htons(data.port); saddr.sin_addr.s_addr = inet_addr(data.ips); int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); if ( res == -1 ) { return -1; } if ( listen(sockfd,data.lismax) == -1 ) { return -1; } return sockfd; }
(6)work_thread.h
#ifndef __THREAD_START #define __THREAD_START #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <pthread.h> void thread_start(int c); #endif
(7)work_thread.c
#include "work_thread.h" void* work_thread(void* arg) { } void thread_start(int c) { pthread_t id; pthread_create(&id,NULL,work_thread,(void*)c); }
这篇关于Linux项目:文件传输的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法