void CPRJ3_0613Dlg::OnBnClickedXiaxiananniu() { // TODO: 在此添加控件通知处理程序代码 if (Is_On) { OffLine(); Is_On = 0; } }
void CPRJ3_0613Dlg::OnBnClickedTuichuanniu() { // TODO: 在此添加控件通知处理程序代码 if (Is_On) { OffLine(); } exit(0); }
LRESULT CPRJ3_0613Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) //消息处理程序(自定义) { // TODO: Add your specialized code here and/or call the base class int Event, len, retval, serial; CString notify; CtlPDU* ctlbuff; SOCKET s = static_cast<SOCKET>(wParam); Event = LOWORD(lParam); switch(message){ //控制套接字 case WM_SOCKET: if (s != CtlSock){ MessageBox(_T("套接字错误!")); break; } switch (Event) { case FD_READ: char tempcmdbuff[300]; len = recv(CtlSock, tempcmdbuff, sizeof(tempcmdbuff), 0); if (len <= 0){ retval = WSAGetLastError(); if (retval != WSAEWOULDBLOCK){ closesocket(CtlSock); } } ctlbuff = (CtlPDU *)tempcmdbuff; switch (ctlbuff->type){ //质询PDU case INQUIRY_PDU_TYPE: Re_Inquiry(CtlSock, tempcmdbuff); break; //控制信息PDU case CTL_PDU_TYPE: switch (ctlbuff->cmd){ //收到服务器请求帐号报文 case REQ_ACCOUNT: Re_Account(CtlSock); break; case RE_ACCESS: MessageBox(_T("认证成功,欢迎使用!")); GUIOnline(); break; case RE_ERR_ACCOUNT: MessageBox(_T("无此用户!")); OffLine(); break; case RE_ERR_INQUIRY: MessageBox(_T("密码错误!")); OffLine(); break; case RE_ERR_FILENAME: MessageBox(_T("文件名错误!")); break; } break; default: break; } break; case FD_CLOSE: closesocket(CtlSock); break; } break; //文件传输套接字 case WM_DATA_SOCKET: switch (Event){ case FD_ACCEPT: AcceptDataSocket(s); break; } break; case WM_FL_SOCK: switch (Event){ case FD_READ: RecvFileList(s); break; case FD_CLOSE: break; } break; case WM_RECV_FILE_SOCK: switch (Event){ case FD_READ: RecvFile(s); break; case FD_CLOSE: break; } break; case WM_SEND_FILE_SOCK: switch (Event){ case FD_READ: SendFile(s); break; case FD_CLOSE: int i; for (i = 0; i < SOCK_LIST_SIZE; i++){ if (sock_list[i] == s){ break; } } KillTimer(i + 1); break; } break; } return CDialog::WindowProc(message, wParam, lParam); }
//void newProcessForClient(int conn_fd, struct sockaddr_in serv_addr, struct OnlineUser * userlist) void newPthreadForClient(int * conn_fd) { char buf[500]; char recvfrom[10]; char message[500]; char sendto[10]; int i, j; int stat; int CONN_FD; struct UserInfo user; struct Package package; int send_to_fd; char oder[20]; CONN_FD = *conn_fd; printf("##server : now is newProcessForClient \n##Waiting for Log in\n"); printf("##server : conn_fd : %d\n", CONN_FD); if(recv(CONN_FD, &user,sizeof(user), 0) == 0) { pthread_exit(0); } printf("##server : received %d\n", user.flag); printf("##server : received %s\n", user.name); printf("##server : received %s\n", user.passwd); if(user.flag == 1) { //登陆 signIn stat = SignIn(CONN_FD,user); printf("stat = %d\n", stat); if(stat == 1) { AddUser(user.name,CONN_FD); ShowUser(); send(CONN_FD, &stat, sizeof(stat), 0); } else { send(CONN_FD, &stat, sizeof(stat), 0); pthread_exit(0); } } if(user.flag == 2) { //注册signUp SignUp(CONN_FD, user); pthread_exit(0); } // strcpy(recvfrom , user.name); OnLineHint(user.name); while(1) { //解析信息 printf("##server : waitting for massage form %s\n", user.name); memset(buf, 0, sizeof(buf)); if(recv(CONN_FD, &package, sizeof(package), 0) == 0) { printf("%s off line\n", user.name); OffLine(user.name); pthread_exit(0); } //下线 if(package.order == 1 && strcmp(package.sendto, "all") == 0) { SendToAll(package); printf("now is send all\n"); continue; } send_to_fd = find_fd(package.sendto); if(package.order == 1) { if(send_to_fd == -1) { continue; } if(send(send_to_fd, &package, sizeof(package), 0) == 0) { printf("send error\n"); continue; } } if(package.order == 2) { if(strcmp(package.message, "show") == 0) { ShowOnlineUser(CONN_FD); } } } }