//文件名不能超过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)); } }
Linux下通过TCP传送文件(服务器端)
最新推荐文章于 2021-05-10 08:06:36 发布