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