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

📄 testcomm.cpp

📁 PDA通讯网关服务器源码程序
💻 CPP
字号:
// TestComm.cpp : implementation file
//

#include "stdafx.h"
#include "GateAgent.h"
#include "TestComm.h"
#include "RecvData.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTestComm

IMPLEMENT_DYNCREATE(CTestComm, CWinThread)

CTestComm::CTestComm()
{
}

CTestComm::~CTestComm()
{
}

BOOL CTestComm::InitInstance()
{
	// TODO:  perform and per-thread initialization here
	return TRUE;
}

int CTestComm::ExitInstance()
{
	// TODO:  perform any per-thread cleanup here
	return CWinThread::ExitInstance();
}

BEGIN_MESSAGE_MAP(CTestComm, CWinThread)
	//{{AFX_MSG_MAP(CTestComm)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestComm message handlers

int CTestComm::Run() 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CWinThread::Run();
}

int CTestComm::OnInitSocket()
{
	    SOCKET m_ServerSock;
		struct	sockaddr_in addr;
		m_ServerSock = socket(AF_INET, SOCK_STREAM, 0);
		if (m_ServerSock <= 0)
		{
			return -1;
		}
		memset((void *)&addr,0,sizeof(addr));
		addr.sin_family =AF_INET;
		addr.sin_port =htons(6000);
		addr.sin_addr.S_un .S_addr =htonl(INADDR_ANY);
			
		if (bind(m_ServerSock, (struct sockaddr *)&addr, sizeof(addr)) != 0)
		{
			closesocket(m_ServerSock);
			return -1;
		}

		if (listen(m_ServerSock, 15))
		{				
			closesocket(m_ServerSock);
			return -1;
		}

		struct sockaddr_in stSockAddr_C;
		int iSockAddr_C = sizeof(stSockAddr_C);
		char chrMsg[350]={0};
		while(!m_bStopFlag)
		{
			SOCKET socketClient = accept(m_ServerSock, (struct sockaddr*)&stSockAddr_C, &iSockAddr_C);
			if (socketClient != INVALID_SOCKET)
			{
				CRecvData *pRWThread = NULL;			
				pRWThread =(CRecvData *)AfxBeginThread(
					RUNTIME_CLASS(CRecvData),
					THREAD_PRIORITY_NORMAL,
					0,
					CREATE_SUSPENDED,
					NULL);

				if (pRWThread != NULL)
				{				
					pRWThread->m_pDlg = m_pDlg;
					pRWThread->m_ClientSocket = socketClient;
					pRWThread->m_bAutoDelete = TRUE;
					// 获取客户端IP
					sockaddr_in name;
					int iLen = sizeof(name);
					getpeername(socketClient,(sockaddr *)&name,(int *)&iLen);							
					sprintf(chrMsg,"客户端[IP:%s ]接入...", inet_ntoa(name.sin_addr));
					OnInsertMess(chrMsg,true,false);
					strcpy(pRWThread->m_nClientIP, inet_ntoa(name.sin_addr));
					//memset(&m_pRWThread->m_pstServerSock, 0, sizeof(ST_SERVER_SOCK));
					//memcpy(&m_pRWThread->m_pstServerSock, &m_pstServerSock[iTmp], sizeof(ST_SERVER_SOCK));
					//memcpy(&m_pRWThread->m_stTransmitIPPORT, &m_stTransmitIPPORT[iTmp], sizeof(ST_TRANSMIT_IPPORT));
					//pRWThread->m_iArray = iTmp;
					pRWThread->m_pstServSock = m_pstServSock;	// 传递指针
					pRWThread->m_pstTransInfo = m_pstTransInfo; // 传递指针
				
					pRWThread->m_bStopFlag = FALSE;	
				
					pRWThread->ResumeThread(); //启动数据收发线程
				} 
				else
				{
					closesocket(socketClient);
				}

		return 0;
}

⌨️ 快捷键说明

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