網路聊天室程式(mfc:利用win32的擴充套件函式):
int wsastartup(
word wversionrequested,lpwsadata lpwsadata
word wversionrequested;wsadata wsadata;
int err;
wversionrequested = makeword( 2, 2 ); //請求winsock2.2版本,也是最高版本
err = wsastartup( wversionrequested, &wsadata );
if ( err != 0 )
if ( lobyte( wsadata.wversion ) != 2 || hibyte( wsadata.wversion ) != 2 )
wsacleanup();//終止對套接字的使用}
三、cchatdlg新增成員變數socket m_socket,並初始化為0,加析構:
cchatdlg::~cchatdlg()
四、新增初始化套接字型檔的函式(1、建立套接字 2、繫結套接字 3、註冊網路讀取事件),並在oninitdialog函式中呼叫:
bool cchatdlg::initsocket()// 在oninitdialog 函式中呼叫
//繫結套接字}sockaddr_in addrsock;
addrsock.sin_addr.s_un.s_addr=htonl(inaddr_any);//4位元組 將主機位元組順序轉換成網路位元組順序
//inet_addr("136.149.3.49");將點式ip位址轉換成四位元組的ulong型別
addrsock.sin_family=af_inet;
addrsock.sin_port=htons(6000);//2位元組 將主機位元組順序轉換成網路位元組順序
if(socket_error==bind(m_socket,(sockaddr*)&addrsock,sizeof(sockaddr))) //繫結套接字
//接收windows的基於訊息的網路事件通知
//訊息到來時系統通過wm_sock的訊息響應函式來通知我們
if(socket_error==wsaasyncselect(m_socket,m_hwnd,um_sock,fd_read)) //我的另一篇用的是多執行緒編寫
return true;
五、自定義訊息:
1、#define um_sockwm_user+1
2、訊息響應函式原型的宣告:
afx_msg void onsock(wparam,lparam);//訊息通過引數傳遞,所以要帶引數
3、訊息對映:
on_message(um_sock,onsock)
4、訊息響應函式的實現:
void cchatdlg::onsock(wparam wparam,lparam lparam) //在訊息響應函式中接收訊息
phost=gethostbyaddr((char*)&addrfrom.sin_addr.s_un.s_addr,4,af_inet);
"%s說 :%s",inet_ntoa(addrfrom.sin_addr),wsabuf.buf);
str.format("%s說 :%s",phost->h_name,wsabuf.buf);
str+="\r\n";
getdlgitemtext(idc_edit_recv,strtemp);
str+=strtemp;
setdlgitemtext(idc_edit_recv,str);
break;
}}
六、傳送端:傳送按鈕傳送訊息
void cchatdlg::onbtnsend()
else
addrto.sin_family=af_inet;
addrto.sin_port=htons(6000);
getdlgitemtext(idc_edit_send,strsend);
len=strsend.getlength();
wsabuf.buf=strsend.getbuffer(len);
wsabuf.len=len+1;
setdlgitemtext(idc_edit_send,"");
if(socket_error==wsasendto(m_socket,&wsabuf,1,&dwsend,0,
(sockaddr*)&addrto,sizeof(sockaddr),null,null)) //傳送訊息
}//the end;
注:struct hostent ;
非同步套接字程式設計
部分說明 define um sock wm user 1 on message um sock onsock afx msg void onsock wparam wparam lparam lparam bool cmydlg initsocket sockaddr in addrsock ad...
MFC套接字程式設計
為了降低網路程式開發的難度,提高程式開發效率,mfc對套接字函式進行了封裝,提供了casyncsocket類和csocket類用於網路程式開發。casyncsocket類用於對套接字函式進行簡單封裝,它提供了基於事件的i o非同步模型,使得使用者可以方便地處理接收和傳送等事件。但是,使用者需要自己處...
網路套接字程式設計
1。位元組序 小位元組 低位儲存在低位元組 大位元組 低位儲存在高位元組 簡單程式判斷 int islittle 2.hostent結構 struct hostent define h addr h addr list 0 這裡是這個資料結構的詳細資料 struct hostent h name 位...