コード例 #1
0
void CPRJ3_0613Dlg::OnBnClickedXiaxiananniu()
{
	// TODO:  在此添加控件通知处理程序代码
	if (Is_On)
	{
		OffLine();
		Is_On = 0;
	}
}
コード例 #2
0
void CPRJ3_0613Dlg::OnBnClickedTuichuanniu()
{
	// TODO:  在此添加控件通知处理程序代码
	if (Is_On)
	{
		OffLine();
	}
	exit(0);
}
コード例 #3
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);
}
コード例 #4
0
ファイル: server1.0.3.c プロジェクト: Dulun/Summer2015
//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);
			}
		}
	}	
}