【网络编程】文件传输
//服务器端:
#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;
}
作者: 快乐的提千万
出处:https://www.cnblogs.com/HappyTeemo/p/18509865
版权:本站使用「CC BY 4.0」创作共享协议,未经作者同意,请勿转载;若经同意转载,请在文章明显位置注明作者和出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)