📄 socmeswnd.cpp
字号:
// DlgSocMes.cpp : 实现文件
//
#include "stdafx.h"
#include "SocMesWnd.h"
#include "Soc.h"
#include <algorithm>
using namespace std;
// CSocMesWnd
IMPLEMENT_DYNAMIC(CSocMesWnd, CWnd)
CSocMesWnd::CSocMesWnd()
{
m_pTcpServe = NULL;
m_pTcpClient = NULL;
m_pUDPSocket = NULL;
m_pUDPSocks5 = NULL;
}
CSocMesWnd::~CSocMesWnd()
{
}
BEGIN_MESSAGE_MAP(CSocMesWnd, CWnd)
ON_MESSAGE(SOC_NETSERVE, OnTCPServe)
ON_MESSAGE(SOC_NETCLIENT, OnTCPClient)
ON_MESSAGE(SOC_NETUDP, OnUDPSocket)
ON_MESSAGE(SOC_NETUDPSOCKS5, OnUDPSock5)
END_MESSAGE_MAP()
// CSocMesWnd 消息处理程序
/////////////////////////////////////////////////////////////////////////////
//
// 服务socket的网络事件
// 参数: wParam 产生网络事件的socket
// lParam 网络事件
//
/////////////////////////////////////////////////////////////////////////////
LRESULT CSocMesWnd::OnTCPServe( WPARAM wParam, LPARAM lParam )
{
int nReturn;
int nIndex;
int nSendID;
int nAddLen;
int nReceiveLen;
sockaddr_in uSocAddIn;
SOCKET socAccept;
SERVE_LPARAM uData;
uData.m_pData = m_pTcpServe->m_pData;
nAddLen = sizeof( uSocAddIn );
if( m_pTcpServe->m_pbOpenSev )
{
if( wParam == m_pTcpServe->m_socServer )
{
switch( lParam )
{
case FD_ACCEPT:
socAccept = accept( m_pTcpServe->m_socServer, (sockaddr*)&uSocAddIn, &nAddLen );
if( socAccept != INVALID_SOCKET )
{
nSendID = m_pTcpServe->m_nNextID;
m_pTcpServe->m_nNextID++;
m_pTcpServe->m_pbSocOpen.push_back( true );
m_pTcpServe->m_pnSocID.push_back( nSendID );
m_pTcpServe->m_pSocData.push_back( socAccept );
uData.m_nSucSoc = nSendID;
if (m_pTcpServe->m_hWndMsg != NULL)
{
::SendMessage( m_pTcpServe->m_hWndMsg, m_pTcpServe->m_nMsg, NET_TCPSERVERACCEPT, (LPARAM)&uData );
}
if (m_pTcpServe->m_pFuncMes != NULL)
{
(*m_pTcpServe->m_pFuncMes)(NET_TCPSERVERACCEPT, (LPARAM)&uData );
}
}
else
{
uData.m_nSucSoc = -1;
if (m_pTcpServe->m_hWndMsg != NULL)
{
::SendMessage( m_pTcpServe->m_hWndMsg,
m_pTcpServe->m_nMsg, NET_TCPSERVERACCEPT,
(LPARAM)&uData );
}
if (m_pTcpServe->m_pFuncMes != NULL)
{
(*m_pTcpServe->m_pFuncMes)(NET_TCPSERVERACCEPT,
(LPARAM)&uData );
}
}
break;
case FD_CLOSE:
break;
case FD_READ:
break;
case FD_WRITE:
break;
case FD_OOB:
break;
default:
break;
}
return NULL;
}
}
vector<SOCKET>::iterator iteFind;
iteFind = find( m_pTcpServe->m_pSocData.begin(), m_pTcpServe->m_pSocData.end(), (SOCKET)wParam );
if( iteFind == m_pTcpServe->m_pSocData.end() )
{
return NULL;
}
else
{
nIndex = iteFind - m_pTcpServe->m_pSocData.begin();
nSendID = m_pTcpServe->m_pnSocID[nIndex];
}
if( m_pTcpServe->m_pbSocOpen[nIndex] )
{
switch( lParam )
{
case FD_CLOSE:
nReturn = closesocket( m_pTcpServe->m_pSocData[nIndex] );
m_pTcpServe->m_pbSocOpen.erase( m_pTcpServe->m_pbSocOpen.begin() + nIndex );
m_pTcpServe->m_pnSocID.erase( m_pTcpServe->m_pnSocID.begin() + nIndex );
m_pTcpServe->m_pSocData.erase( m_pTcpServe->m_pSocData.begin() + nIndex );
uData.m_nSucSoc = nSendID;
if (m_pTcpServe->m_hWndMsg != NULL)
{
::SendMessage( m_pTcpServe->m_hWndMsg, m_pTcpServe->m_nMsg,
NET_TCPSERVERCLOSE, (LPARAM)&uData );
}
if (m_pTcpServe->m_pFuncMes != NULL)
{
(*m_pTcpServe->m_pFuncMes)(NET_TCPSERVERCLOSE, (LPARAM)&uData);
}
break;
case FD_READ:
nReceiveLen = recv( m_pTcpServe->m_pSocData[nIndex], (char*)m_pTcpServe->m_pucDataBuf, m_pTcpServe->m_nBufLen, 0 );
if( nReceiveLen < 0 )
{
nReceiveLen = 0;
}
m_pTcpServe->m_nDataLen = nReceiveLen;
uData.m_nSucSoc = nSendID;
if (m_pTcpServe->m_hWndMsg != NULL)
{
::SendMessage( m_pTcpServe->m_hWndMsg, m_pTcpServe->m_nMsg,
NET_TCPSERVERRECEIVE, (LPARAM)&uData );
}
if (m_pTcpServe->m_pFuncMes != NULL)
{
(*m_pTcpServe->m_pFuncMes)(NET_TCPSERVERRECEIVE, (LPARAM)&uData);
}
break;
case FD_WRITE:
uData.m_nSucSoc = nSendID;
if (m_pTcpServe->m_hWndMsg != NULL)
{
::SendMessage( m_pTcpServe->m_hWndMsg, m_pTcpServe->m_nMsg,
NET_TCPSERVERSEND, (LPARAM)&uData );
}
if (m_pTcpServe->m_pFuncMes != NULL)
{
(*m_pTcpServe->m_pFuncMes)(NET_TCPSERVERSEND, (LPARAM)&uData);
}
break;
case FD_OOB:
break;
default:
break;
}
return NULL;
}
return NULL;
}
/////////////////////////////////////////////////////////////////////////////
//
// 客户socket的网络事件
// 参数: wParam 产生网络事件的socket
// lParam 网络事件
//
/////////////////////////////////////////////////////////////////////////////
LRESULT CSocMesWnd::OnTCPClient( WPARAM wParam, LPARAM lParam )
{
int nReceiveLen;
if( m_pTcpClient->m_bClientOpen )
{
if( wParam == m_pTcpClient->m_socClient )
{
switch( lParam )
{
case FD_CONNECT:
if (m_pTcpClient->m_hWndMsg != NULL)
{
::SendMessage( m_pTcpClient->m_hWndMsg, m_pTcpClient->m_nMsg,
NET_TCPCLIENTCONNECTED, (LPARAM)m_pTcpClient->m_pData );
}
if (m_pTcpClient->m_pFuncMes != NULL)
{
(*m_pTcpClient->m_pFuncMes)(NET_TCPCLIENTCONNECTED,
(LPARAM)m_pTcpClient->m_pData);
}
break;
case FD_CLOSE:
if (m_pTcpClient->m_hWndMsg != NULL)
{
::SendMessage( m_pTcpClient->m_hWndMsg, m_pTcpClient->m_nMsg,
NET_TCPCLIENTCLOSE, (LPARAM)m_pTcpClient->m_pData );
}
if (m_pTcpClient->m_pFuncMes != NULL)
{
(*m_pTcpClient->m_pFuncMes)(NET_TCPCLIENTCLOSE,
(LPARAM)m_pTcpClient->m_pData);
}
break;
case FD_READ:
nReceiveLen = recv( m_pTcpClient->m_socClient, (char*)m_pTcpClient->m_pucDataBuf, m_pTcpClient->m_nBufLen, 0 );
if( nReceiveLen < 0 )
{
nReceiveLen = 0;
}
m_pTcpClient->m_nDataLen = nReceiveLen;
if (m_pTcpClient->m_hWndMsg != NULL)
{
::SendMessage( m_pTcpClient->m_hWndMsg, m_pTcpClient->m_nMsg,
NET_TCPCLIENTRECEIVE, (LPARAM)m_pTcpClient->m_pData );
}
if (m_pTcpClient->m_pFuncMes != NULL)
{
(*m_pTcpClient->m_pFuncMes)(NET_TCPCLIENTRECEIVE,
(LPARAM)m_pTcpClient->m_pData);
}
break;
case FD_WRITE:
if (m_pTcpClient->m_hWndMsg != NULL)
{
::SendMessage( m_pTcpClient->m_hWndMsg, m_pTcpClient->m_nMsg,
NET_TCPCLIENTSEND, (LPARAM)m_pTcpClient->m_pData );
}
if (m_pTcpClient->m_pFuncMes != NULL)
{
(*m_pTcpClient->m_pFuncMes)(NET_TCPCLIENTSEND,
(LPARAM)m_pTcpClient->m_pData);
}
break;
case FD_OOB:
break;
default:
break;
}
}
}
return NULL;
}
/////////////////////////////////////////////////////////////////////////////
//
// UDP socket的网络事件
// 参数: wParam 产生网络事件的socket
// lParam 网络事件
//
/////////////////////////////////////////////////////////////////////////////
LRESULT CSocMesWnd::OnUDPSocket( WPARAM wParam, LPARAM lParam )
{
int nReceiveLen;
int nSize;
sockaddr_in uSocAddIn;
nSize = sizeof(uSocAddIn);
if( m_pUDPSocket->m_bUDPOpen )
{
if( wParam == m_pUDPSocket->m_socUDP )
{
switch( lParam )
{
case FD_CLOSE:
if (m_pUDPSocket->m_hWndMsg != NULL)
{
::SendMessage( m_pUDPSocket->m_hWndMsg, m_pUDPSocket->m_nMsg,
NET_UDPCLOSE, (LPARAM)m_pUDPSocket->m_pData );
}
if (m_pUDPSocket->m_pFuncMes != NULL)
{
(*m_pUDPSocket->m_pFuncMes)(NET_UDPCLOSE,
(LPARAM)m_pUDPSocket->m_pData);
}
break;
case FD_READ:
{
UDP_LPARAM uParam;
nReceiveLen = recvfrom( m_pUDPSocket->m_socUDP, (char*)m_pUDPSocket->m_pucDataBuf, m_pUDPSocket->m_nBufLen, 0,
(sockaddr*)&uSocAddIn, &nSize );
uParam.m_uInfo.pucIP[0] = uSocAddIn.sin_addr.S_un.S_un_b.s_b1;
uParam.m_uInfo.pucIP[1] = uSocAddIn.sin_addr.S_un.S_un_b.s_b2;
uParam.m_uInfo.pucIP[2] = uSocAddIn.sin_addr.S_un.S_un_b.s_b3;
uParam.m_uInfo.pucIP[3] = uSocAddIn.sin_addr.S_un.S_un_b.s_b4;
uParam.m_uInfo.nPort = ntohs(uSocAddIn.sin_port);
uParam.m_pData = m_pUDPSocket->m_pData;
if( nReceiveLen < 0 )
{
nReceiveLen = 0;
}
m_pUDPSocket->m_nDataLen = nReceiveLen;
if (m_pUDPSocket->m_hWndMsg != NULL)
{
::SendMessage( m_pUDPSocket->m_hWndMsg, m_pUDPSocket->m_nMsg,
NET_UDPRECEIVE, (LPARAM)&uParam );
}
if (m_pUDPSocket->m_pFuncMes != NULL)
{
(*m_pUDPSocket->m_pFuncMes)(NET_UDPRECEIVE,
(LPARAM)&uParam);
}
}
break;
case FD_WRITE:
if (m_pUDPSocket->m_hWndMsg != NULL)
{
::SendMessage( m_pUDPSocket->m_hWndMsg, m_pUDPSocket->m_nMsg,
NET_UDPSEND, (LPARAM)m_pUDPSocket->m_pData );
}
if (m_pUDPSocket->m_pFuncMes != NULL)
{
(*m_pUDPSocket->m_pFuncMes)(NET_UDPSEND,
(LPARAM)m_pUDPSocket->m_pData);
}
break;
case FD_OOB:
break;
default:
break;
}
}
}
return NULL;
}
/////////////////////////////////////////////////////////////////////////////
//
// socks5 (UDP)的网络事件
// 参数: wParam 产生网络事件的socket
// lParam 网络事件
//
/////////////////////////////////////////////////////////////////////////////
LRESULT CSocMesWnd::OnUDPSock5( WPARAM wParam, LPARAM lParam )
{
int nReceiveLen;
int nSize;
BYTE *pucRecBuf;
sockaddr_in uSocAddIn;
nSize = sizeof(uSocAddIn);
if( m_pUDPSocks5->m_bOpen )
{
if( wParam == m_pUDPSocks5->m_socUDPData )
{
switch( lParam )
{
case FD_CLOSE:
if (m_pUDPSocks5->m_hWndMsg != NULL)
{
::SendMessage( m_pUDPSocks5->m_hWndMsg, m_pUDPSocks5->m_nMsg,
NET_UDPSOCKS5CLOSE, (LPARAM)m_pUDPSocks5->m_pData );
}
if (m_pUDPSocks5->m_pFuncMes != NULL)
{
(*m_pUDPSocks5->m_pFuncMes)(NET_UDPSOCKS5CLOSE,
(LPARAM)m_pUDPSocks5->m_pData);
}
break;
case FD_READ:
{
UDP_LPARAM uParam;
pucRecBuf = new BYTE[m_pUDPSocks5->m_nBufLen + 10];
nReceiveLen = recvfrom( m_pUDPSocks5->m_socUDPData, (char*)pucRecBuf, m_pUDPSocks5->m_nBufLen + 10, 0,
(sockaddr*)&uSocAddIn, &nSize );
if( nReceiveLen <= 10 )
{
nReceiveLen = 0;
}
else
{
uParam.m_uInfo.pucIP[0] = pucRecBuf[4];
uParam.m_uInfo.pucIP[1] = pucRecBuf[5];
uParam.m_uInfo.pucIP[2] = pucRecBuf[6];
uParam.m_uInfo.pucIP[3] = pucRecBuf[7];
uParam.m_uInfo.nPort = pucRecBuf[8] * 256 + pucRecBuf[9];
uParam.m_pData = m_pUDPSocks5->m_pData;
memcpy( m_pUDPSocks5->m_pucDataBuf, &pucRecBuf[10], nReceiveLen - 10 );
}
m_pUDPSocks5->m_nDataLen = nReceiveLen - 10;
if (m_pUDPSocks5->m_hWndMsg != NULL)
{
::SendMessage( m_pUDPSocks5->m_hWndMsg, m_pUDPSocks5->m_nMsg,
NET_UDPSOCKS5RECEIVE, (LPARAM)&uParam );
}
if (m_pUDPSocks5->m_pFuncMes != NULL)
{
(*m_pUDPSocks5->m_pFuncMes)(NET_UDPSOCKS5RECEIVE,
(LPARAM)&uParam);
}
delete [] pucRecBuf;
}
break;
case FD_WRITE:
if (m_pUDPSocks5->m_hWndMsg != NULL)
{
::SendMessage( m_pUDPSocks5->m_hWndMsg, m_pUDPSocks5->m_nMsg,
NET_UDPSOCKS5SEND, (LPARAM)m_pUDPSocks5->m_pData );
}
if (m_pUDPSocks5->m_pFuncMes != NULL)
{
(*m_pUDPSocks5->m_pFuncMes)(NET_UDPSOCKS5SEND,
(LPARAM)m_pUDPSocks5->m_pData);
}
break;
case FD_OOB:
break;
default:
break;
}
}
}
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -