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)