首页 > 代码库 > 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 }
View Code

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: 聊天室创建