- 在pch.h中引入
socket
头文件
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
2. 在xxDlg.h中定义socket消息
#define WM_SOCKET WM_USER + 1000
在类向导中添加消息,使用快捷键Ctrl+Shift+X打开类向导
- 在xxDlg.h中定义相关对象
SOCKET sSocket, cSocket;//用于绑定和监听的服务端socket对象
sockaddr_in sAddr, cAddr;//用于服务绑定的地址结构
int clientAddrLen = sizeof(sockaddr_in);
- 在xxDlg.cpp的
OnInitDialog()
函数中初始化socket
BOOL CMFCSocketAppDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
//初始化socket库
WSADATA wsaData;
WORD wsaVersion = MAKEWORD(2, 0);
WSAStartup(wsaVersion, &wsaData);
//创建socket
sSocket = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == sSocket) {
return TRUE;
}
//初始化一个用于服务绑定的地址结构
sAddr.sin_family = AF_INET;
sAddr.sin_addr.S_un.S_addr = INADDR_ANY;
sAddr.sin_port = htons(9999);
//绑定socket
bind(sSocket, (sockaddr*)&sAddr, sizeof(sAddr));
//监听socket
listen(sSocket, 100);
WSAAsyncSelect(sSocket, this->m_hWnd, WM_SOCKET,
FD_ACCEPT | FD_READ | FD_WRITE | FD_CLOSE | FD_CONNECT);
return TRUE; // return TRUE unless you set the focus to a control
}
OnSocket
函数中代码
//wParam--->sSocket
//lParam--->FD_ACCEPT
afx_msg LRESULT CMFCSocketAppDlg::OnSocket(WPARAM wParam, LPARAM lParam)
{
switch (lParam) {
case FD_ACCEPT://socket的连接事件
cSocket = accept(sSocket, (sockaddr*)&cAddr, &clientAddrLen);
break;
default:
break;
}
return 0;
}
- 查看是否有数据进入
打开命令行窗口,输入telnet 127.0.0.1 9999