首页 > 代码库 > MFC: 聊天室创建
MFC: 聊天室创建
1. 创建一个DIALOG的项目
2. 在资源里创建聊天室界面
3. 在CDialog::InitInstance里开头增加:
if (!AfxSocketInit()) {
AfxMessageBox("load socket liabrary failed!");
return FALSE;
}
4. 在stdfax.h里增加:
#include <Afxsock.h>
5. 增加成员变量SOCKET m_socket;
6. 增加成员函数BOOL InitSocket();
1 BOOL CChatDlg::InitSocket(void) 2 { 3 m_socket = socket(AF_INET, SOCK_DGRAM, 0); 4 if (INVALID_SOCKET == m_socket) { 5 MessageBox("socket created failed!"); 6 return FALSE; 7 } 8 SOCKADDR_IN addrSock; 9 addrSock.sin_family = AF_INET;10 addrSock.sin_port = htons(6000);11 addrSock.sin_addr.S_un.S_addr = htonl(INADDR_ANY);12 13 int retval;14 bind(m_socket, (SOCKADDR *)&addrSock, sizeof(SOCKADDR));15 if (SOCKET_ERROR == retval) {16 closesocket(m_socket);17 MessageBox("bind error!");18 return FALSE;19 }20 return 0;21 }
7. 在CChatDlg::OnInitDialog()里增加
InitSocket();
8. 在CChatDlg.h里增加
struct RECVPARAM {
SOCKET sock;
HWND hwnd;
};
在CChatDlg::OnInitDialog()的InitSocket();下面增加:
RECVPARAM *pRecvParam = new RECVPARAM;
pRecvParam->sock = m_socket;
pRecvParam->hwnd = m_hWnd;
HANDLE hThread = CreateThread(NULL, 0, RecvProc, (LPVOID)pRecvParam, 0, NULL);
CloseHandle(hThread);
9. 为CChatDlg增加函数
DWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter)
{
return 0;
}
在声明这个函数的头文件里加上static
10. 后面太复杂,看视频吧。。
MFC: 聊天室创建