客户端往服务器端传送文件
来源:互联网 发布:js的 math.hypot方法 编辑:程序博客网 时间:2024/05/24 04:32
客户端
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#define MAXLINE 80#define SERV_PORT 8000int mycp(int fd,int socketfd) /*文件复制*/{char buf[128];int ret,rret;int wdest;bzero(buf,128);while((ret=read(fd,buf,128))>0){wdest=write(socketfd,buf,ret);rret=ret-wdest;while(rret!=0){wdest=write(socketfd,&buf[wdest],rret);rret=ret-wdest;}bzero(buf,128);}return 0;}int main(int argc,char *argv[])/*客户端*/{struct sockaddr_in servaddr;char buf[MAXLINE];int sockfd;char *str;int fd;fd=open(argv[1],O_RDONLY);if(fd<0){printf("open error\n");return -1;}if(argc!=2){fputs("usage:./client message\n",stderr);exit(1);}str=argv[1];sockfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;inet_pton(AF_INET,"127.0.0.1",&servaddr.sin_addr);servaddr.sin_port=htons(SERV_PORT);connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));write(sockfd,str,strlen(str)+1);/*将文件名写过去*/mycp(fd,sockfd);/*sockfd也是一文件描述符,将客户端文件复制给sockfd*/close(fd);close(sockfd);return 0;}
服务器端
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>
#define MAXLINE 80#define SERV_PORT 8000int mycp(int listenfd,int fd){ char buf[128]; int ret,rret; int wdest;
bzero(buf,128);
while((ret=read(listenfd,buf,128))>0){ wdest=write(fd,buf,ret); rret=ret-wdest;
while(rret!=0){ wdest=write(fd,&buf[wdest],rret); rret=ret-wdest; } bzero(buf,128);
} return 0;}
int main(void){ struct sockaddr_in servaddr,cliaddr; socklen_t cliaddr_len; int listenfd,connfd; char buf[MAXLINE]; char str[INET_ADDRSTRLEN]; int i,n; int fd;
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family=AF_INET; servaddr.sin_addr.s_addr=htonl(INADDR_ANY); servaddr.sin_port=htons(SERV_PORT);
bind(listenfd,(struct sockaddr *)&servaddr, sizeof(servaddr)); listen(listenfd,20);
printf("Accepting connections ...\n"); while(1){ cliaddr_len=sizeof(cliaddr); connfd=accept(listenfd,(struct sockaddr *)&cliaddr, &cliaddr_len); n=read(connfd,buf,MAXLINE);/*读文件名*/ fd=open(buf,O_RDWR|O_TRUNC|O_CREAT,0666); mycp(connfd,fd);/*connfd也文件描述符,将其内容复制到fd,实现文件拷贝*/
printf("received from %s at PORT %d\n", inet_ntop(AF_INET,&cliaddr.sin_addr,str, sizeof(str)), ntohs(cliaddr.sin_port));
close(fd); close(connfd); } return 0;}
客户端与服务器传送文件之间用sockfd和connfd联系
- 客户端往服务器端传送文件
- (下载、打开)从服务器端将文件传送到客户端
- 使用rsync实现客户端与服务器端的文件同步与传送
- Linux下通过TCP传送文件(服务器端)
- Linux下通过TCP传送文件(客户端)
- GUI界面,客户端向服务端传送文件
- 生成服务器端和客户端Cpp文件
- 客户端上传文件&服务器端保存数据
- Java客户端下载服务器端的文件
- android文件上传客户端与服务器端代码
- 多线程文件下载的服务器端及客户端
- linux网络编程,将服务器端时间通过tcp传送到客户端
- 线程Socket传送文件的客户端和服务端源代码
- Linux下使用SSH客户端及其Sftp文件传送
- TCP协议从客户端传送文件给服务端
- java客户端仿http传送文件到php服务器
- c语言实现socket服务端/客户端通过tcp传送文件
- Flex给服务器端传送对象
- 【leetcode】Maximum Subarray
- Java SE学习笔记-GUI
- c++虚函数表解析
- linux 中删除使用rpm安装的软件包的方法
- 题目1504:把数组排成最小的数
- 客户端往服务器端传送文件
- 数据文件数据存放格式转换实现
- Oracle 利用10053处理不走索引语句一则
- Zepto 点击指定元素以外的地方触发事件
- Windows编程中遇到的问题(王艳平Windows程序设计)
- 每天坚持Crack Code(Day 4)
- Java SE学习笔记-网络编程
- Table Elimination & Anchor modeling
- 说说“提问”这件事