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

📄 sockettest.cpp

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CSocketTest
extern bool                       g_bRun;
extern int						  g_nMax;
IMPLEMENT_DYNCREATE(CSocketTest, CWinThread)

CSocketTest::CSocketTest()
{
}

CSocketTest::~CSocketTest()
{
}

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CSocketTest message handlers

int CSocketTest::Run() 
{
	int iRet=OnTestInSocket();
	if (iRet<0)
	{
		return -1;
	}

	if(g_bRun)
	{
		return CWinThread::Run();
	}
	else
	{
		return -1;
	}
}

int CSocketTest::OnTestInSocket()
{
		bool m_bStopFlag = false;
		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(g_bRun)
		{
			SOCKET socketClient = accept(m_ServerSock, (struct sockaddr*)&stSockAddr_C, &iSockAddr_C);
			if (socketClient != INVALID_SOCKET)
			{
				if (g_nMax<300)
				{
					CRecvData *pRWThread = NULL;			
					pRWThread =(CRecvData *)AfxBeginThread(
						RUNTIME_CLASS(CRecvData),
						THREAD_PRIORITY_NORMAL,
						0,
						CREATE_SUSPENDED,
						NULL);

					if (pRWThread != NULL)
					{				
						
						g_nMax++;
						pRWThread->m_pDlg = m_pDlg;
						pRWThread->m_ClientSocket = socketClient;
						pRWThread->m_bAutoDelete = true;
						pRWThread->m_iSendNum = m_iSendNum;
						// 获取客户端IP
						sockaddr_in name;
						int iLen = sizeof(name);
						getpeername(socketClient,(sockaddr *)&name,(int *)&iLen);							
						sprintf(chrMsg,"客户端[IP:%s PORT:%d]接入...", inet_ntoa(name.sin_addr),socketClient);
						m_pDlg->OnInsertMess(chrMsg,true,false);
						strcpy(pRWThread->m_nClientIP, inet_ntoa(name.sin_addr));

						pRWThread->ResumeThread(); //启动数据收发线程
					} 
					else
					{
						closesocket(socketClient);
					}
				}
				else
				{
					m_pDlg->OnInsertMess("系统太忙",true,true);
				}//if (g_nMax<200)
			}//if (socketClient != INVALID_SOCKET)
		}
		return 0;

}

⌨️ 快捷键说明

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