?? d077.bmp.txt
字號:
typedef CList <SOCKET, SOCKET&> SOCKET_ARRAY;
CList在文件afxtempl.h中聲明。
2)添加非阻塞網絡事件處理函數。為了響應非阻塞的網絡事件,需要在對話框類中分
別為服務器和客戶機增加一個消息處理函數。
首先,分別在對話框類的頭文件ChatRoomDlg.h中增加兩個自定義消息:
#define SER_MESSAGE WM_USER +100
#define CLI_MESSAGE WM_USER + 101
其中,SER_MESSAGE和CLI_MESSAGE分別作為上述兩個類WSAAsyncSelect0函數
的參數,WM_USER為用戶定義消息的起點,一般從+100開始。
其次,在ChatRoomDlg.h文件為CChatRoomDlg類添加兩個函數的聲明:
afx_msg LRESULT OnServerMessage(WPARAM wParam, LPARAMIParam);
afx_msg LRESULT OnClientMessage(WPARAM wParam, LPARAM IParam);
然后,在ChatRoomDlg.cpp文件中的BEGIN_MESSAGE_MAP(CChatRoomDlg.CDialog)
和END_MESSAGE_MAPO之間增加如下代碼,將函數與消息關聯起來:
ON_MESSAGE(SER_MESSAGE, OnServerMessage)
ON_MESSAGE(CLI_MESSAGE, OnClientMessage)
最后,在ChatRoomDlg.cpp中添加詳細的消息處理函數代碼,詳細代碼如下:
LRESULT CExamplelDlg::OnServerMessage(WPARAM wParam, LPARAM lParam)
{
SOCKET socket,ts;
int length,i,j ;
CString str="";
CEdit * output=NULL;
char s[1024J;
int len;
switch(IParam)
{
case FD_ACCEPT:
socket= accept(m_server.m_hSocket,NULL,NULL);
length=m_connectionList.GetCount0;
for(i=O;i<length;i++)
{
ts=m_connectionList.GetAt(m_connectionList.Findlndex (i》 ;
s[O]=NULL;
strcat(s," -令游客進入了 ~p天室”);
send(ts,s,strlen(s),0);
}
m_sShowText+="\n";
m_sShowText+="-AI游客進入了聊天室 T ";
GetDlgItem(IDC_SHOWTEXT)->SetWindowText(m_sShowText);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -