【网络编程】文件传输

Copy Highlighter-hljs
//服务器端: #include <iostream> #include <string> #include <cstring> #include <cstdio> #include <cstdlib> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <unistd.h> using namespace std; char* file_path; char file_name[100]; void* send_file(void* arg); int main(int argc,char** argv) { if(argc!=2) { fprintf(stderr,"命令语法错误!\n"); exit(1); } if(0!=access(argv[1],R_OK)) { fprintf(stderr,"待发送的文件不存在或不可读!\n"); exit(1); } file_path=argv[1]; char* p=strrchr(argv[1],'/'); if(p==NULL) { strcpy(file_name,argv[1]); } else { strcpy(file_name,p+1); } int sock_listen=socket(AF_INET,SOCK_STREAM,0); struct sockaddr_in srv_addr; srv_addr.sin_family=AF_INET; srv_addr.sin_addr.s_addr=INADDR_ANY; srv_addr.sin_port=htons(6666); if(-1==bind(sock_listen,(struct sockaddr*)&srv_addr,sizeof(srv_addr))) { perror("bind"); exit(1); } listen(sock_listen,5); int sock_conn; pthread_t tid; while(1) { sock_conn=accept(sock_listen,NULL,NULL); if(sock_conn==-1) { perror("accept"); break; } if(pthread_create(&tid,NULL,send_file,(void*)sock_conn)!=0) { fprintf(stderr,"pthread_create: Create thread fail!\n"); close(sock_conn); break; } } close(sock_listen); return 0; } //客户端 void* send_file(void* arg) { int sock_conn=(int)arg; send(sock_conn,file_name,sizeof(file_name),0); char buff[1024]; int ret; int fd=open(file_path,O_RDONLY); while(ret=read(fd,buff,sizeof(buff))) { //send(sock_conn,buff,ret,0); write(sock_conn,buff,ret); } close(fd); close(sock_conn); return NULL; }
posted @   快乐的提千万  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示