Linux下通过TCP传送文件(服务器端)

//文件名不能超过30个字符长度 #include #include #include #include #include #include #include #include #include #include #define SERVERPORT 5555 //服务器端口 #define MAXACCEPT 5 //最大接受的连接数 void main(int argc,char **argv) { char file[30]; //要发送的文件不能超过30个字符 char c; char buffer[1024]; //每次发送的缓存 int source; //用来判断文件是否存在 int k; //传送文件时,实际从文件中读到的字节数 int sockfd;//原始套接字 int newsock;//接收到客户端请求后新建的套接字 struct sockaddr_in server_addr,client_addr; int sin_size;//sockaddr_in所占字节数 //判断输入的参数的数目是否够 bzero(file,30); if(argc!=2) {printf("/t参数输入错误/n /t例如:#./server /mnt/test/server.c/n"); exit(1); } strcpy(file,argv[1]); //判断要传送的文件是否能打开 if((source=open(file,O_RDONLY))<0) {perror("源文件打开错误"); exit(1); } //创建套接字等待客户端的连接 if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0) {perror("sock:"); exit(1); } //填写服务器信息 server_addr.sin_family=AF_INET; server_addr.sin_addr.s_addr=htonl(INADDR_ANY); server_addr.sin_port=htons(SERVERPORT); //绑定sockfd描述符 if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))<0) {perror("bind:"); exit(1); } //监听sockfd描述符 if(listen(sockfd,MAXACCEPT)<0) {perror("listen:"); exit(1); } while(1) { //服务器阻塞,直到客户端连接 sin_size=sizeof(struct sockaddr_in); if((newsock=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))<0) {perror("accept error:"); exit(1); } //客户端连接以后,传送文件名 if(write(newsock,file,30)<0) {perror("write error:"); exit(1); } //传送文件 while((k=read(source,buffer,sizeof(1024)))>0) write(newsock,buffer,k); printf("/n/n/t发送完毕/n"); close(source); close(newsock); //printf("server get connect from %s/n",inet_ntoa(client_addr.sin_addr)); } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值