📄 listensocket.cpp
字号:
// ListenSocket.cpp : implementation file
//
#include "stdafx.h"
#include "Server.h"
#include "ListenSocket.h"
#include "MainFrm.h"
#include "ServerView.h"
#include "DataSocket.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CListenSocket
CListenSocket::CListenSocket()
{
}
CListenSocket::~CListenSocket()
{
}
// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CListenSocket, CAsyncSocket)
//{{AFX_MSG_MAP(CListenSocket)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif // 0
/////////////////////////////////////////////////////////////////////////////
// CListenSocket member functions
void CListenSocket::OnAccept(int nErrorCode)
{
if (nErrorCode) {
return;
}
CDataSocket* pDataSock = new CDataSocket(this);
if (!Accept((CAsyncSocket&)*pDataSock/*, &addr, &addrLen */))
{
TRACE0("failed to accept client socket\n");
delete pDataSock;
return;
}
// 为数据套接字注册网络事件
pDataSock->AsyncSelect(FD_READ | FD_WRITE | FD_CLOSE);
m_lstDataSock.AddTail(pDataSock);
}
// 关闭pSock表示的数据套接字
BOOL CListenSocket::CloseDataSocket(CDataSocket *pSock)
{
POSITION pos = m_lstDataSock.GetHeadPosition();
for (int i = 0; i < m_lstDataSock.GetCount(); i++)
{
POSITION temp = pos;
CDataSocket* p = m_lstDataSock.GetNext(pos);
if (p == pSock) {
pSock->Close();
m_lstDataSock.RemoveAt(temp);
delete p;
return TRUE;
}
}
return FALSE;
}
// 向每个数据报发送消息
BOOL CListenSocket::SendPackageToAll(char *buf, int buflen, CDataSocket* pFrom)
{
POSITION pos = m_lstDataSock.GetHeadPosition();
//
for (int i = 0; i < m_lstDataSock.GetCount(); i++)
{
CDataSocket* pSock = m_lstDataSock.GetNext(pos);
if (pSock != pFrom) {
if (pSock->Send((void*)buf, buflen, 0) <= 0) {
TRACE0("Unable to send message to client.");
return FALSE;
}
}
}
//
return TRUE;
}
// Remove data socket but not delete it!
/*
void CListenSocket::RemoveDataSock(CDataSocket* p)
{
int sockCnt = m_lstDataSock.GetCount();
POSITION pos = m_lstDataSock.GetHeadPosition();
for (int i = 0; i < sockCnt; i++)
{
POSITION posTemp = pos;
CDataSocket* pDataSock = m_lstDataSock.GetNext(pos);
if (pDataSock == p)
{
m_lstDataSock.RemoveAt(posTemp);
return;
}
}
}
*/
void CListenSocket::CloseAllSocks()
{
POSITION pos = m_lstDataSock.GetHeadPosition();
while (pos != NULL) {
CDataSocket* pSock = m_lstDataSock.GetNext(pos);
pSock->Close();
delete pSock;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -