⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gprsserverdlg.cpp

📁 gprs
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		return GetLastError();
	}
	sHostName=szHostName;
	return 0;
}

int CGprsServerDlg::GetIpAddress(const CString &sHostName, CString &sIpAddress)		//获得本地IP
{
	struct hostent FAR * lpHostEnt=gethostbyname(sHostName);
	if(lpHostEnt==NULL)
	{
		//产生错误
		sIpAddress=_T("");
		return GetLastError();
	}
	//获取IP
	LPSTR lpAddr=lpHostEnt->h_addr_list[0];
	if(lpAddr)
	{
		struct in_addr inAddr;
		memmove(&inAddr,lpAddr,4);
		//转换为标准格式
		sIpAddress=inet_ntoa(inAddr);
		if(sIpAddress.IsEmpty())
			sIpAddress=_T("没有取得");
	}
	return 0;
}

int CGprsServerDlg::GetNamebyAddress(const CString &IpAddress,CString &sYouName)//获得对方计算机名称
{
	unsigned long addr;
	addr=inet_addr(IpAddress);
	struct hostent FAR * lpHostEnt=gethostbyaddr((char *)&addr,4,AF_INET);
	if(lpHostEnt==NULL)
	{
		//产生错误
		sYouName=_T("");

		AfxMessageBox("连接不上");//应该取得其错误
		return -1;
	}
	CString name=lpHostEnt->h_name;
	sYouName=name;

	return 0;
}

void CGprsServerDlg::AddMsgList(CString IP,CString str) //添加信息于LISTBOX 控件中
{
	SYSTEMTIME tm;
	GetLocalTime(&tm);
	CString time;
	time.Format(_T(" %d:%02.2d"), tm.wHour, tm.wMinute);
	m_AddMsgList.AddString(IP+"于"+time+"信息: "+str);
	int numList=m_AddMsgList.GetCount()-1;
	GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(true);
	m_AddMsgList.SetTopIndex(numList);
	m_AddMsgList.SetCurSel(numList);
	//水平滚动
	int max_width=0;
	CSize sz;
	CClientDC dc(this);
	for(int i=0;i<m_AddMsgList.GetCount();i++)
	{
		m_AddMsgList.GetText(i,str);
		sz=dc.GetTextExtent(str);
		if(max_width<sz.cx)
		max_width=sz.cx;
	}
	m_AddMsgList.SendMessage(LB_SETHORIZONTALEXTENT,max_width,0);

}

void CGprsServerDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}



//TCP监听线程
UINT _UDPThread(LPVOID lparam)
{
	return 0;
}

#if 0
UINT _SendMsgThread(LPVOID lparam)	//TCP发送信息线程
{
	
	CGprsServerDlg *pDlg=(CGprsServerDlg *)lparam;
	if(pDlg->StopServer==true)	return -1;
	
	CSocket sockClient;
	sockClient.Create();
	CString ip,strError;
	pDlg->m_YourIP.GetWindowText(ip);
	int conn=sockClient.Connect(ip, PORT+pDlg->m_client);
	if(conn==0)	///////////////////////////////////
	{
		AfxMessageBox("_SendMsgThread Connect错误!"+pDlg->GetError(GetLastError()));
		sockClient.ShutDown(2);
		sockClient.Close();
//		Sleep(2000);
		AfxEndThread(1L);
		return 0;
		
	}
	//首先发送标记M为信息,2
	int end=0;
	end=sockClient.Send("M",FLAG); 
	if(end==SOCKET_ERROR)
	{
		AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));
		return -1;
	}
	else if(end!=2)
	{
		AfxMessageBox("消息头错误");
		return -1;
	}

	CString strMsg=pDlg->m_MsgSend;

	end=sockClient.Send(strMsg,strMsg.GetLength()); 
	if(end==SOCKET_ERROR)
	{
		AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));
		return -1;
	}
	CString strLocalName;
	pDlg->GetLocalHostName(strLocalName);
	CString strLocalIP;
	pDlg->GetIpAddress(strLocalName,strLocalIP);
	pDlg->AddMsgList(strLocalIP+"->"+strLocalName,strMsg);
//	Sleep(2000);
	int i=0;
	sockClient.Close();
	
	return 0;
}
#endif

UINT _ThreadCapture(LPVOID lparam)	//抓取对方屏幕线程
{
#if 0	
	CMyQQDlg *pDlg=(CMyQQDlg *)lparam;
	if(pDlg->StopServer==true)	return -1;
	
	CSocket sockClient;
	sockClient.Create();
	CString ip;
	pDlg->m_You_IP.GetWindowText(ip);
	sockClient.Connect(ip, PORT+pDlg->m_client); 
	//首先发送标记C为抓取,2
	int end=0;
	end=sockClient.Send("C",FLAG);
	///////////////////////////////////////////////////////////////////发送标志是否成功
	if(end==SOCKET_ERROR)										
	{
		AfxMessageBox("_ThreadCapture Send错误!"+pDlg->GetError(GetLastError()));
		return -1;
	}
	
	else if(end!=2) 
	{
		AfxMessageBox("发送头错误");
		return -1;
	}
#endif
	return 0;
}

void CGprsServerDlg::OnButtonConnect() 
{
	// TODO: Add your control notification handler code here
	
	CString str;
	m_YourIP.GetWindowText(str);
	CString strOut,strIn;
	m_YourIP.GetWindowText(strIn);
	
	if(GetNamebyAddress(strIn,strOut)==-1)
	{
		GetDlgItem(IDC_BUTTON_CONNECT)->EnableWindow(true);		//连接不可用
		return;
	}

	UpdateData(false);

	if(m_WorkType == CLIENT_MODE)			//如果是ClIENT模式
	{
		this->AddMsgList(m_fileName,":连接已经建立");
		SetTimer(1,10000,NULL);
	}
	//else
	//{
		if(m_nSockType==SOCK_TCP)
		{
			this->AddMsgList(m_fileName,":服务已经建立");
			pThreadLisen=::AfxBeginThread(_ListenTcpThread,this);	//开始TCP线程
			GetDlgItem(IDC_BUTTON_FILE_STOP)->EnableWindow(true);	//发送消息可用
		}
		else
		{
			pThreadLisen=::AfxBeginThread(_UDPThread,this);			//开始UDP线程
			GetDlgItem(IDC_BUTTON_FILE_STOP)->EnableWindow(true);	//发送可用
		}
	//}

	GetDlgItem(IDC_RADIO_TCP)->EnableWindow(false);			//单选不可用
	GetDlgItem(IDC_RADIO_UDP)->EnableWindow(false);			//单选不可用
	GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);	//断开可用
	GetDlgItem(IDC_BUTTON_CONNECT)->EnableWindow(false);	//连接不可用
	GetDlgItem(IDC_RADIO_SERVER)->EnableWindow(false);
	GetDlgItem(IDC_RADIO_CLIENT)->EnableWindow(false);
//	GetDlgItem(IDC_RADIO_BOTH)->EnableWindow(false);
	GetDlgItem(IDC_IPADDRESS)->EnableWindow(false);
}



void CGprsServerDlg::OnButtonDisconnect() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_BUTTON_CONNECT)->EnableWindow(true);
	GetDlgItem(IDC_RADIO_TCP)->EnableWindow(true);
	((CButton*)GetDlgItem(IDC_RADIO_UDP))->EnableWindow(true);
	GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);
//	GetDlgItem(IDC_BUTTON_SEND_MSG)->EnableWindow(false);
	GetDlgItem(IDC_BUTTON_UPDATE_PIC)->EnableWindow(false);
	m_AddMsgList.ResetContent();
	GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(false);
	((CButton*)GetDlgItem(IDC_RADIO_SERVER))->EnableWindow(true);
	((CButton*)GetDlgItem(IDC_RADIO_CLIENT))->EnableWindow(true);
//	((CButton*)GetDlgItem(IDC_RADIO_BOTH))->EnableWindow(true);
//	GetDlgItem(IDC_BUTTON_CAPUTER)->EnableWindow(false);
//	GetDlgItem(IDC_BUUPDATE_PIC)->EnableWindow(true);
	m_AddMsgList.SendMessage(LB_SETHORIZONTALEXTENT,0,0);

/////////////////////////////////////////发送结束
	if(m_nSockType == SOCK_TCP)
	{
		DWORD dwStatus;

		if (pThreadLisen != NULL)
		{
			if(::GetExitCodeThread(pThreadLisen->m_hThread, &dwStatus)==0)
			{
				int errror = GetLastError();
				return;
			}
			if (dwStatus == STILL_ACTIVE)
			{
				CSocket sockClient;
				sockClient.Create();
				CString ip,strError;
				ip="127.0.0.1";
				int conn = sockClient.Connect(ip, m_Port);
				if(conn == 0)	///////////////////////////////////
				{
					AfxMessageBox("关闭错误!" + GetError(GetLastError()));
					sockClient.ShutDown(2);
					sockClient.Close();
				//	Sleep(2000);
					return;	
				}
				uchar data;
				uchar buf[10];
				FillSendData('C',CLIENT_DISCONNECT,0,NULL);
				data = Bytes2String(g_cSendBuf,buf,g_cSendLen);
				sockClient.Send(g_cSendBuf,data); //结束
			}
			else
			{
				delete pThreadLisen;
				pThreadLisen = NULL;
			}
		}
	}
}

void CGprsServerDlg::OnButtonClear() 
{
	// TODO: Add your control notification handler code here
	m_AddMsgList.ResetContent();
	GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(false);
	m_AddMsgList.SendMessage(LB_SETHORIZONTALEXTENT,0,0);

}

void CGprsServerDlg::OnButtonFileStop() 
{
	// TODO: Add your control notification handler code here
	FileStop=true;
	FileWork=false;
	GetDlgItem(IDCANCEL)->EnableWindow(true);
	GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);
}

void CGprsServerDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	CString str;

	UpdateData(true);
	m_YourIP.GetWindowText(str);

	GetDlgItem(IDC_BUTTON_FILE_STOP)->EnableWindow(true);	//发送消息可用


	pThreadclient = ::AfxBeginThread(_ClientHanderThread,this);	 //开始传送文件线程
		

	
	CDialog::OnTimer(nIDEvent);
}

//server Receive file;
int CGprsServerDlg::ReceiveFileMsg(CSocket &recSo,SOCKADDR_IN &client)//接受函数
{
	uchar ctype;

	ctype = packData.cmd_type;
	switch(ctype)
	{
		case 'C':		//拷屏
			;//SaveYouScreen(CopyScreenToBitmap(),client); 	 //发送地址
			break;

	/*	case 'F':				//保存你的文件
			SaveYouFile(recSo,client);
			recSo.Close();
			Sleep(2000);
			break;  */

		case 'M':				//处理信息
			{
			CString strOut;
		//	AfxMessageBox("davidlitonghui");
		//	m_YourIP.GetWindowText(strIn);
		//	AfxMessageBox(strIn);
		//	GetNamebyAddress(strIn,strOut);
			CString youName;
			Sleep(5000);
			youName.Format(inet_ntoa(client.sin_addr));
		//	GetNamebyAddress(youName,strOut);
			CString str= youName+"<-"; //+strOut;
			AddMsgList(str, GetMessageString(packData.cmd));
		
			m_YourIP.SetWindowText(youName);
			Server_MsgHandler(this,recSo);
			memset((uchar *)&packData,0, sizeof(packData));
			}	
			break;
		default:
			break;
	}
	
	return 0;
}

void CGprsServerDlg::OnButtonUpdatePic() 
{
	// TODO: Add your control notification handler code here
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -