MFC 非同步套接字程式設計舉例 網路聊天室程式

2021-06-26 06:35:40 字數 2582 閱讀 8224

網路聊天室程式(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 位...