boost::tuple<shared_data::action, client_info> shared_data::process_user(const std::string& uname, const std::string& phash, int session_id) { boost::mutex::scoped_lock lock(guard_); // XXX Get password from database. // if(lookup_username_in_database_fails) { // return boost::make_tuple(user_not_found, it->second); // } auto it = clients_.find(uname); if(session_id == -1) { // No session id, check if user name in list already. if(it == clients_.end()) { // User name not in list. Let's add it. auto ret = clients_.insert(std::pair<std::string, client_info>(uname, client_info(generate_session_id(), true, generate_salt()))); it = ret.first; } } else { if(it == clients_.end()) { // user not in list, but we've got a session id. Expire session and generate a new id. auto ret = clients_.insert(std::pair<std::string, client_info>(uname, client_info(generate_session_id(), true, generate_salt()))); it = ret.first; } else { // We have been sent a session_id, check if it's valid. if(it->second.session_id != session_id) { it->second.signed_in = false; return boost::make_tuple(bad_session_id, it->second); } } } if(phash.empty()) { return boost::make_tuple(send_salt, it->second); } else { if(check_password(it->second.salt, fixed_password, phash)) { it->second.signed_in = true; return boost::make_tuple(login_success, it->second); } else { it->second.signed_in = false; return boost::make_tuple(password_failed, it->second); } } }
int main(int argc, char const *argv[]) { if( argc < 2) { printf("请传入参数\n"); exit(1); } int sockfd; sockfd = socket(AF_INET,SOCK_STREAM,0); if( sockfd < 0 ) { printf("socekt错误%s\n",strerror(errno)); exit(1); } struct sockaddr_in addr; memset(&addr,0,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(atoi(argv[1])); addr.sin_addr.s_addr = INADDR_ANY; if( bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)) < 0) { printf("socket绑定错误%s\n",strerror(errno)); exit(1); } if( listen(sockfd,10) < 0 ) { printf("socket监听错误%s\n",strerror(errno)); exit(1); } while(1) { struct sockaddr_in clientaddr; socklen_t len = sizeof(clientaddr); int clientfd = accept(sockfd,(struct sockaddr*)&clientaddr,&len); if( clientfd < 0 ) { printf("接收客户端数据失败%s\n",strerror(errno)); continue; } client_info(clientaddr); do_service(clientfd); close(clientfd); } return 0; }
int main(int argc, char const *argv[]) { socked = socket(AF_INET,SOCK_DGRAM,0); if( socked < 0 ) { printf("socket创建失败%s\n",strerror(errno)); exit(1); } struct sockaddr_in udpaddr; memset(&udpaddr,0,sizeof(udpaddr)); udpaddr.sin_family = AF_INET; udpaddr.sin_port = htons(atoi(argv[1])); udpaddr.sin_addr.s_addr = INADDR_ANY; if( bind(socked,(struct sockaddr*)&udpaddr,sizeof(udpaddr)) < 0 ) { printf("绑定失败%s\n",strerror(errno)); exit(1); } char buff[1024]; memset(buff,0,1024); struct sockaddr_in clientaddr; socklen_t len = sizeof(clientaddr); ssize_t n; while(1) { if( (n = recvfrom(socked,buff,sizeof(buff),0,(struct sockaddr*)&clientaddr,&len)) < 0) { printf("接收数据失败%s\n",strerror(errno)); continue; } client_info(n,buff,clientaddr); //do_service(clientaddr); } return 0; }
int main(int argc, char **argv) { char buff[MAX_BUFF], result_buff[SEND_BUFF]; // array for 'converted command(input)', 'result (output)' int n; int server_fd, conn_fd; // socket discriptor for server and client int clilen; // client struct's size struct sockaddr_in srvaddr, cliaddr; // socket address struct if(argc != 2) // if wrong input case { write(STDOUT_FILENO, "Server error : Check Port Numver\n", strlen("Server error : Check Port Numver\n")); return -1; } /* open socket */ if((server_fd = socket(PF_INET, SOCK_STREAM,0)) < 0) { write(STDERR_FILENO, "Server : socket() err!!\n", strlen("Server : socket() err!!\n")); return -1; } /* initialize server socket struct */ memset(&srvaddr, 0, sizeof(srvaddr)); srvaddr.sin_family= PF_INET; srvaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); srvaddr.sin_port = htons(atoi(argv[1])); //bind socket with address if(bind(server_fd, (struct sockaddr*)&srvaddr, sizeof(srvaddr)) < 0) { write(STDERR_FILENO, "Server : bind() err!!\n", strlen("Server : bind() err!!\n")); return -1;//exit(1); } // listen (5 time) if(listen(server_fd, 5) < 0) { write(STDERR_FILENO, "Server : listen() err!!\n", strlen("Server : listen() err!!\n")); return -1; } for(;;) { clilen = sizeof(cliaddr); /* accept client's connection */ conn_fd = accept(server_fd, (struct sockaddr* ) &cliaddr, &clilen); if(conn_fd < 0) // connection falied case { write(STDERR_FILENO, "Server : accept() err!!\n", strlen("Server : accept() err!!\n")); return -1; } /*display client ip and port*/ if(client_info(&cliaddr) < 0) { write(STDERR_FILENO,"Server : client_info() err!!\n", strlen("Server : client_info() err!!\n")); return -1; } while(1) { n = read(conn_fd, buff, MAX_BUFF); buff[n] = '\0'; if(cmd_process(buff, result_buff) < 0) /*command execute and result*/ { write(STDERR_FILENO, "Server : cmd_process() err!!\n", strlen("Server : cmd_process() err!!\n")); break; } /* send result to client */ write(conn_fd, result_buff, strlen(result_buff)); /* if converted command is QUIT*/ if(!strcmp(result_buff, "QUIT")) { write(STDOUT_FILENO, "Server Quit!!\n", strlen("Server Quit!!\n")); break; } } if(!strcmp(result_buff, "QUIT")) // break loop break; } close(server_fd); // close server socket return 0; }