18,356
社区成员
发帖
与我相关
我的任务
分享
#include <Winsock2.h> // support for socket
#include "Mstcpip.h" // support for tcpip
#define WM_RECVDATA WM_USER + 1
//如果没有Mstcpip.h
#define RCVALL_ON 1
#define SIO_RCVALL 0x98000001
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_MESSAGE(WM_RECVDATA, OnRecvData)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
WSADATA stWsaData;
if (WSAStartup(MAKEWORD(2, 2), &stWsaData) != 0)
{
MessageBox("加载网络服务失败!");
return -1;
}
SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
if (sock == SOCKET_ERROR)
{
MessageBox("socket faild!");
return -1;
}
sockaddr_in sa;
memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons(0);
sa.sin_addr.S_un.S_addr = inet_addr("30.14.184.1");//my network IP
if (bind(sock, (sockaddr *)&sa, sizeof(sa)) == SOCKET_ERROR)
{
MessageBox("bind faild!");
return -1; // fail to create
}
DWORD dwValue = RCVALL_ON;
if (ioctlsocket(sock, SIO_RCVALL, &dwValue) == SOCKET_ERROR)
{
MessageBox("I/O设置失败");
return -1; // fail to create
}
if (WSAAsyncSelect(sock, m_hWnd, WM_RECVDATA, FD_READ | FD_CLOSE) == SOCKET_ERROR)
{
MessageBox("异步选择失败!");
return -1; // fail to create
}
//CRect rect;
//GetClientRect(&rect);
//SetDlgItemPos(rect.Width(), rect.Height());
return 0;
}
void CMainFrame::OnRecvData(SOCKET sock, long lEvent)
{
switch (WSAGETSELECTEVENT(lEvent))
{
case FD_READ:
{
BYTE pBuf[8192];
int nLen = recv(sock, (char*)pBuf, sizeof(pBuf), 0);
//...
break;
}
case FD_CLOSE:
//...
break;
}
}