void act_client(int socket) { FHEcontext context(gM, gP, gR); buildModChain(context, gL); FHESecKey sk(context); sk.GenSecKey(64); FHEPubKey &pk = sk; send_pk(socket, pk); std::vector<Ctxt> ctxts; receive_ctxt(socket, pk, ctxts); nn_close(socket); }
/* *选择:0<往链接写报文>/1<cd>/2<myls>/3<打开文件>/4<读取服务端文件内容并发给客户端> *******5<移除文件>/6<获取当前路径>/7<关闭链接>/8<退出循环> * */ int choice(node* n,packet* pk,int* running,char *filedir) { switch(pk->type) { case 0: put(pk,n->put_fd); break; case 1: mycd(pk,n->curdir); send_pk(n->accept_fd,pk); break; case 2: myls(pk,n->curdir); send_pk(n->accept_fd,pk); break; case 3: myputs(pk,&(n->put_fd),filedir); send_pk(n->accept_fd,pk); break; case 4: mygets(n->accept_fd,pk,n->curdir); break; case 5: myremove(pk,n->curdir); send_pk(n->accept_fd,pk); break; case 6: mypwd(pk,n->curdir); send_pk(n->accept_fd,pk); break; case 7: putend(&(n->put_fd)); break; case 8: *running=0; break; default:break; } return 0; }
int main(int argc,char *argv[]) { if(argc!= 3) { printf("error argcs\n"); return -1; } chdir("../file"); char addr[15]; char port[4]; strcpy(addr,argv[1]); strcpy(port,argv[2]); printf("server: add:%s,port:%s.\n",addr,port); int socket_fd = socket(AF_INET,SOCK_STREAM,0); if(socket_fd==-1) { perror("socket() failed\n"); return -1; } struct sockaddr_in server_addr; bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_port=htons(atoi(port)); server_addr.sin_addr.s_addr=inet_addr(addr); if(connect(socket_fd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr))==-1) { perror("connect()\n"); return -1; } printf("client is ready.\n"); int epoll_fd=epoll_create(1); struct epoll_event ev,evs[2]; ev.events=EPOLLIN; ev.data.fd=socket_fd; if(epoll_ctl(epoll_fd,EPOLL_CTL_ADD,socket_fd,&ev)==-1) { perror("epoll_ctl(socket_fd) failed\n"); return -1; } ev.events=EPOLLIN; ev.data.fd=STDIN_FILENO; if(epoll_ctl(epoll_fd,EPOLL_CTL_ADD,STDIN_FILENO,&ev)==-1) { perror("epoll_ctl(STDIN) failed\n"); return -1; } int epoll_num; int epoll_ev; packet pk; bzero(&pk,sizeof(pk)); int getfd=-1; while(1) { bzero(&evs,sizeof(evs)); epoll_num=epoll_wait(epoll_fd,evs,2,-1); if(epoll_num>0) { for(epoll_ev=0;epoll_ev<epoll_num;epoll_ev++) { if(evs[epoll_ev].data.fd==socket_fd && evs[epoll_ev].events==EPOLLIN) { recv_pk(socket_fd,&pk); choice(socket_fd,&pk,&getfd); } if(evs[epoll_ev].data.fd==STDIN_FILENO && evs[epoll_ev].events==EPOLLIN) { char buf[128]; bzero(buf,sizeof(buf)); read(STDIN_FILENO,buf,sizeof(buf)); make(buf,strlen(buf)-1,&pk); send_pk(socket_fd,&pk); if(strcmp("down\n",buf)==0) { close(socket_fd); return 0; } } } } } }