📄 gprsserverdlg.cpp
字号:
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 + -