www.pudn.com > Fronter_xie3.rar > OnlinePage.cpp
// OnlinePage.cpp : implementation file
//
#include "stdafx.h"
#include "Fronter.h"
#include "OnlinePage.h"
#include "struct.h"
#include "Connect790Socket.h"
#include "ConnectTestGBSocket.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
Para_Address g_SocketList[LISTENSOCKETNUM];
TestGBPara_Address g_TestGbSocketList[LISTENSOCKETNUM];
int g_Cl790Dindex=0;
int g_TestGBindex=0;
bool g_Cl790DEXIT=false;
bool g_TestGBEXIT=false;
bool g_bstartstat=false;
/////////////////////////////////////////////////////////////////////////////
// COnlinePage property page
IMPLEMENT_DYNCREATE(COnlinePage, CPropertyPage)
COnlinePage::COnlinePage() : CPropertyPage(COnlinePage::IDD)
{
//{{AFX_DATA_INIT(COnlinePage)
m_ListenCl790dPort = 7888;
m_ListTestGbPort = 7889;
//}}AFX_DATA_INIT
}
COnlinePage::~COnlinePage()
{
}
void COnlinePage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COnlinePage)
DDX_Control(pDX, IDC_LIST_NETSTATE, m_ListNetWorkstate);
DDX_Text(pDX, IDC_EDIT_LISTENCL790DPORT, m_ListenCl790dPort);
DDV_MinMaxUInt(pDX, m_ListenCl790dPort, 0, 65536);
DDX_Text(pDX, IDC_EDIT_LISTENTESTGBPORT, m_ListTestGbPort);
DDV_MinMaxUInt(pDX, m_ListTestGbPort, 0, 65536);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(COnlinePage, CPropertyPage)
//{{AFX_MSG_MAP(COnlinePage)
ON_BN_CLICKED(IDC_BUTTON_STARTCL790D, OnButtonStartcl790d)
ON_BN_CLICKED(IDC_BUTTON_STARTTESTGB, OnButtonStarttestgb)
ON_BN_CLICKED(IDC_BUTTON_STOPCL790D, OnButtonStopcl790d)
ON_BN_CLICKED(IDC_BUTTON_STOPTESTGB, OnButtonStoptestgb)
ON_BN_CLICKED(IDC_BUTTON_STARTSTAT, OnButtonStartstat)
ON_BN_CLICKED(IDC_BUTTON_STOPSTAT, OnButtonStopstat)
ON_BN_CLICKED(IDC_BUTTON_CLEARSTAT, OnButtonClearstat)
ON_MESSAGE (USER_PROC_UPDATA, UpdateList)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COnlinePage message handlers
BOOL COnlinePage::OnInitDialog()
{
CPropertyPage::OnInitDialog();
WORD VersionRequested = MAKEWORD(1,1);
WSADATA wsaData;
WSAStartup(VersionRequested, &wsaData); // 启动winsock服务
if ( wsaData.wVersion != VersionRequested )
{
printf("Wrong version or WinSock not loaded\r");
fflush(0);
}
// TODO: Add extra initialization here
CFont m_font;
m_font.CreateFont(16, 0,0,0,FW_NORMAL, 0,0,0,
DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial");
m_ListNetWorkstate.SetFont(&m_font);
m_ListNetWorkstate.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_ListNetWorkstate.SetBkColor(RGB(247,247,255));
m_ListNetWorkstate.SetTextColor(RGB(0,0,255));
m_ListNetWorkstate.SetTextBkColor(RGB(247,247,255));
m_ListNetWorkstate.InsertColumn(0, "序号", LVCFMT_LEFT, 40);
m_ListNetWorkstate.InsertColumn(1, "终端地址", LVCFMT_LEFT, 110);
m_ListNetWorkstate.InsertColumn(2, "IP地址", LVCFMT_LEFT, 120);
m_ListNetWorkstate.InsertColumn(3, "发送帧数", LVCFMT_LEFT, 80);
m_ListNetWorkstate.InsertColumn(4, "发送字节数", LVCFMT_LEFT, 95);
m_ListNetWorkstate.InsertColumn(5, "接收帧数", LVCFMT_LEFT, 80);
m_ListNetWorkstate.InsertColumn(6, "接收字节数", LVCFMT_LEFT, 90);
m_ListNetWorkstate.InsertItem(0,"1");
m_ListNetWorkstate.SetItemText(0,1,"3344");
m_ListNetWorkstate.SetItemText(0,2,"10.98.96.25");
m_ListNetWorkstate.SetItemText(0,3,"0");
m_ListNetWorkstate.SetItemText(0,4,"0");
m_ListNetWorkstate.SetItemText(0,5,"0");
m_ListNetWorkstate.SetItemText(0,6,"0");
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//服务器线程
UINT thread790D(LPVOID p)
{
int s=1,flag=0;
char debugbuff[100];
COnlinePage *POnlinePage=(COnlinePage*)p;
while(1)
{
s=1;
for(int i=0;i= LISTENSOCKETNUM)
{
Sleep(5000);
continue;
}
g_SocketList[i].cl790D_SOCKET =accept(POnlinePage->sock790D,(sockaddr*)&(POnlinePage->serv790D),&(POnlinePage->addlen));
memset(debugbuff,0,100);
sprintf(debugbuff,"thread790D,socket=%d,i=%d\n\r",g_SocketList[i].cl790D_SOCKET,i);
DebugMSg(debugbuff,LOG_INFO);
if(g_SocketList[i].cl790D_SOCKET==INVALID_SOCKET) break;
strcpy(g_SocketList[i].cl790D_MainIP,inet_ntoa(POnlinePage->serv790D.sin_addr));
g_SocketList[i].cl790D_Valid=1;
g_SocketList[i].hWnd=POnlinePage->GetSafeHwnd();
// ::PostMessage(g_SocketList[i].hWnd, USER_PROC_UPDATA, 0, 0);
g_Cl790Dindex=i;
//启动线程
AfxBeginThread(&CL790DGBLocalSocketThread,(void* )&g_Cl790Dindex);
}
//终止线程
AfxEndThread(0);
return 0;
}
//服务器线程
UINT threadTestGB(LPVOID p)
{
int s=1,loop=1,flag=0;
COnlinePage *POnlinePage=(COnlinePage*)p;
//获得客户端数量
while(1)
{
s=1;
for(int i=0;i= LISTENSOCKETNUM)
{
Sleep(5000);
continue;
}
g_TestGbSocketList[i].TestGB_SOCKET = accept(POnlinePage->SockTestGB,(sockaddr*)&(POnlinePage->servTestGB),&(POnlinePage->addlen));
if (g_TestGbSocketList[i].TestGB_SOCKET==INVALID_SOCKET) break;
char debugbuff[100];
memset(debugbuff,0,100);
sprintf(debugbuff,"thread790D,socket=%d,i=%d\n\r",g_TestGbSocketList[i].TestGB_SOCKET,i);
DebugMSg(debugbuff,LOG_INFO);
strcpy(g_TestGbSocketList[i].TestGB_MainIP,inet_ntoa(POnlinePage->servTestGB.sin_addr));
g_TestGbSocketList[i].TestGB_Valid=true;
g_TestGBindex=i;
//启动线程
AfxBeginThread(&TestGBLocalSocketThread,(void* )&(g_TestGBindex));
}
//终止线程
AfxEndThread(0);
return 0;
}
void SetSocketList(SOCKET Localsockfd,BYTE index,Para_Address *pAdd)
{
int iret,i;
if(index==NETADDRESS_GBAddress)
{
for(i=0;icl790D_GBAddress);
if(iret==0)g_SocketList[i].cl790D_Valid=0;
}
}
for(i=0;icl790D_Valid;
break;
case NETADDRESS_GBAddress:
{
strcpy(g_SocketList[i].cl790D_GBAddress,pAdd->cl790D_GBAddress);
break;
}
case NETADDRESS_MainIP:
strcpy(g_SocketList[i].cl790D_MainIP,pAdd->cl790D_MainIP);
break;
case NETADDRESS_state:
break;
case NETADDRESS_SOCKET:
break;
}
::PostMessage(g_SocketList[i].hWnd, USER_PROC_UPDATA, 0, 0);
}
}
return ;
}
void COnlinePage::UpdateList()
{
int j=1;
char buff[20];
char debugbuff[100];
sprintf(buff,"%d",j);
// return;
m_ListNetWorkstate.DeleteAllItems();
memset(debugbuff,0,100);
sprintf(debugbuff,"COnlinePage::UpdateList() 更新界面. \n\r");
DebugMSg(debugbuff,LOG_INFO);
for(int i=0;iEnableWindow(false);
//调用线程
COnlinePage *pOnlinePage;
pOnlinePage=this;
AfxBeginThread(&thread790D,pOnlinePage);
return ;
}
void COnlinePage::OnButtonStarttestgb()
{
// TODO: Add your control notification handler code here
int iret;
g_TestGBEXIT=false;
UpdateData(true);
servTestGB.sin_addr.s_addr=htonl(INADDR_ANY);
servTestGB.sin_family=AF_INET;
servTestGB.sin_port=htons(m_ListTestGbPort); //5000;
addlen=sizeof(servTestGB);
//创建socket
SockTestGB=socket(AF_INET,SOCK_STREAM,0);
if(SockTestGB==INVALID_SOCKET)
{
AfxMessageBox("COnlinePage::OnButtonStarttestgb,socket()失败。");
return ;
}
//绑定
iret=bind(SockTestGB,(sockaddr*)&servTestGB,addlen);
if(iret==-1)
{
AfxMessageBox("COnlinePage::OnButtonStarttestgb,bind()失败。");
return ;
}
//开始侦听
listen(SockTestGB,LISTENSOCKETNUM);
//调用线程
COnlinePage *pOnlinePage;
pOnlinePage=this;
GetDlgItem(IDC_BUTTON_STARTTESTGB)->EnableWindow(false);
char debugbuff[100];
memset(debugbuff,0,100);
sprintf(debugbuff,"COnlinePage::OnButtonStarttestgb(),建立socket成功,socket=%d.\n\r",SockTestGB);
DebugMSg(debugbuff,LOG_INFO);
AfxBeginThread(&threadTestGB,pOnlinePage);
return ;
}
void COnlinePage::OnButtonStopcl790d()
{
// TODO: Add your control notification handler code here
g_Cl790DEXIT=true;
for(int i=0;iEnableWindow(true);
}
void COnlinePage::OnButtonStoptestgb()
{
// TODO: Add your control notification handler code here
g_TestGBEXIT=true;
for(int i=0;iEnableWindow(true);
}
void COnlinePage::OnButtonStartstat()
{
GetDlgItem(IDC_BUTTON_STARTSTAT)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_STOPSTAT)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_CLEARSTAT)->EnableWindow(false);
m_nTimer=SetTimer(1, 1*60*1000, 0);
UpdateList();
g_bstartstat=true;
}
void COnlinePage::OnButtonStopstat()
{
GetDlgItem(IDC_BUTTON_STARTSTAT)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_STOPSTAT)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_CLEARSTAT)->EnableWindow(true);
KillTimer(m_nTimer);
UpdateList();
g_bstartstat=false;
}
void COnlinePage::OnButtonClearstat()
{
for(int i=0;i