freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第10章網(wǎng)絡(luò)程序設(shè)計實例-文庫吧

2024-09-29 16:13 本頁面


【正文】 ))。 //遠程地址類型 =AF_INET。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 //遠程端口 = htons(Cs2Port)。 //遠程 IP地址 =i_addr(Cs2IP)。 //向 Windows注冊網(wǎng)絡(luò)事件 WSAAsyncSelect(s1,hW,WM_USER+1,FD_READ)。 break。 case WM_USER+1: //Socket觸發(fā)事件 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 switch(LOWORD(lP)) { case FD_READ: //接收遠程信息 len=recv(s1,recvBuf,sizeof(recvBuf),0)。 recvBuf[len]=0。 MessageBox(0,recvBuf,UDP程序 2從 UDP程序 1收到的數(shù)據(jù) ,0)。 break。 } break。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 case WM_LBUTTONDOWN: //點擊鼠標左鍵 wsprintf(sendBuf,Hello,UDP程序 1!)。 len = sizeof(Cs2A)。 //發(fā)送信息 sendto(s1,sendBuf,strlen(sendBuf),0,(struct sockaddr *) amp。Cs2A,len)。 break。 } return DefWindowProc(hW,msg,wP,lP)。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 程序運行結(jié)果 在這兩個程序調(diào)試 、 編譯和鏈接正確后 , 就可以執(zhí)行這兩個程序了 。 這兩個程序執(zhí)行后的窗口如圖 101所示 , 其中 , 圖 (a)是 UDP程序 1執(zhí)行后的窗口 , 圖 (b)是 UDP程序 2執(zhí)行后的窗口 。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 (a) ?UDP程序 1的窗口 (b) ?UDP程序 2的窗口 圖 101 UDP程序執(zhí)行后的窗口 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 程序執(zhí)行后就可以檢查它們所實現(xiàn)的功能了 。 在UDP程序 1的窗口中點擊鼠標左鍵 , 則可以發(fā)送數(shù)據(jù)給UDP程序 2, UDP程序 2在收到 UDP程序 1發(fā)送的數(shù)據(jù)后 ,彈出如圖 102(a)所示的窗口 , 并顯示收到的數(shù)據(jù) 。 同樣 , 如果在 UDP程序 2的窗口中點擊鼠標左鍵 , 則可以發(fā)送數(shù)據(jù)給 UDP程序 1, UDP程序 1在收到 UDP程序 2發(fā)送的數(shù)據(jù)后 , 彈出如圖 102(b)所示的窗口 。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 (a) UDP程序 2收到的信息 (b) UDP程序 1收到的信息 圖 102 UDP程序收到數(shù)據(jù)后彈出的窗口 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 在學(xué)習(xí)這兩個程序的過程中 , 我們應(yīng)該注意兩個問題: (1) 在程序中 , 雖然使用的是數(shù)據(jù)報傳輸方式(SOCK_DGRAM), 但卻使用 bind(?)函數(shù)進行了地址的綁定 。 (2) 這兩個程序的功能是一樣的 , 所以代碼幾乎是相同的 。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 使用 MFC類庫進行網(wǎng)絡(luò)程序 設(shè)計的實例 創(chuàng)建客戶端程序 我們使用 VC++提供的可視化集成編程環(huán)境來創(chuàng)建客戶端程序 。 創(chuàng)建客戶端程序的主要步驟介紹如下 。 1. 創(chuàng)建一個工程 使用 VC++ 的 應(yīng) 用 程 序 生 成 向 導(dǎo) (MFC AppWizard[exe])創(chuàng)建一個基于對話框的工程 , 該工程的名稱為 CSockClient。 2. 設(shè)計程序?qū)υ捒? 如圖 103所示 。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 圖 103 添加類變量 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 3. 生成 CAsyncSocket類的子類 MySock 4. 在 在生成的 : include include “ 5. 向 向 : public: BOOL m_bConnected。 //是否連接 UINT m_nLength。 //消息長度 char m_szBuffer[4096]。 //消息緩沖區(qū) 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 6. 重載 (1) ?MySock(?)函數(shù)重載的代碼如下: MySock::MySock(?) { m_nLength=0。 memset(m_szBuffer,0,sizeof(m_szBuffer))。 m_bConnected=FALSE } MySock::~MySock(?) { //關(guān)閉套接字 if(m_hSocket!=INVALID_SOCKET) Close(?)。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 (2) ?OnReceive (?)函數(shù)重載的代碼如下: void MySock::OnReceive(int nErrorCode) { m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0)。 //下面兩行代碼用來獲取對話框指針 CCSockClientApp* pApp=(CCSockClientApp*)AfxGetApp(?)。 CCSockClientDlg*pDlg=(CCSockClientDlg*)pAppm_pMainWnd。 pDlg(0,m_szBuffer)。 memset(m_szBuffer,0,sizeof(m_szBuffer))。 CAsyncSocket::OnReceive(nErrorCode)。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 (3) ?OnSend(?)函數(shù)重載的代碼如下: void MySock::OnSend(int nErrorCode) { Send(m_szBuffer,m_nLength,0)。 m_nLength=0。 memset(m_szBuffer,0,sizeof(m_szBuffer))。 //繼續(xù)提請一個 39。39。讀 39。39。的網(wǎng)絡(luò)事件 , 接收 Server消息 AsyncSelect(FD_READ)。 CAsyncSocket::OnSend(nErrorCode)。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 (4) ?OnConnect(?)函數(shù)重載的代碼如下: void MySock::OnConnect(int nErrorCode) { if (nErrorCode==0) { m_bConnected=TRUE。 CCSockClientApp* pApp=(CCSockClientApp*)AfxGetApp(?)。 CCSockClientDlg* pDlg=(CCSockClientDlg*)pAppm_pMainWnd。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 memcpy(m_szBuffer,Connected to ,13)。 strncat(m_szBuffer,pDlgm_szServerAdr, sizeof(pDlgm_szServerAdr))。 pDlg(0,m_szBuffer)。 //提請一個 39。39。讀 39。39。的網(wǎng)絡(luò)事件 , 準備接收 AsyncSelect(FD_READ)。 } CAsyncSocket::OnConnect(nErrorCode)。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 7. 新建一個輸入地址的對話框 新建一個輸入地址信息的對話框 IDD_Addr用來輸入 IP地址和端口號;生成一個新的基于對話框的類 CAddrDlg。在該對話框中增加兩個編輯 (Edit)控件:一個為 IDC_Addr,用來輸入要連接的 IP地址;另一個為 IDC_Port, 用來輸入端口號 。 使用類向?qū)?(ClassWizard)為 CAddrDlg類添加 m_Addr和m_Port兩個類變量 。 它們的 ID標識 、 類型和名稱如下: Control ID Type Member IDC_Addr CString m_Addr IDC_Port Int m_Port 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 然后向 CSockClientDlg類中添加如下代碼: protected: int TryCount。 MySock m_clientSocket。 UINT m_szPort。 public: char m_szServerAdr[256]。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 10. 添加 “ 連接 ” 按鈕的程序代碼 雙擊 IDD_CSOCKCLIENT_DIALOG對話框中的 “ 連接 ” 按鈕 , 添加以下代碼: void CCSockClientDlg::OnConnect(?) { (2)。 =INVALID_SOCKET。 =FALSE。 CAddrDlg m_Dlg。 //默認端口 7 =7。 if ((?)==IDOK amp。amp。 !(?)) 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 { memcpy(m_szServerAdr,sizeof(m_szServerAdr))。 m_szPort=。 //建立計時器 , 每 1秒嘗試連接一次 , 直到連上或 TryCount10 SetTimer(1,1000,NULL)。 TryCount=0。 } } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 11 . 添加 Windows 消息 WM_TIMER 的響應(yīng)函數(shù)OnTimer void CCSockClientDlg::OnTimer(UINT nIDEvent) { if (==INVALID_SOCKET) BOOL bFlag=(0,SOCK_STREAM,FD_CONNECT)。 if(!bFlag) 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 { AfxMessageBox(Socket Error!)。 (?)。 PostQuitMessage(0)。 return。 } } (m_szServerAdr,m_szPort)。 TryCount++。 if (TryCount =10 || ) 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 { KillTimer(1)。 if (TryCount =10) AfxMessageBox(Connect Failed!)。 return。 } CDialog::OnTimer(nIDEvent)。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 12. 添加 “ 發(fā)送 ” 按鈕的程序代碼 雙擊 IDD_CSOCKCLIENT_DIALOG對話框中的“ 發(fā)送 ” 按鈕 , 添加以下代碼: void CCSockClientDlg::OnSend(?) { if () { = (, sizeof())。 (FD_WRITE)。 ()。 } } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 13. 添加 “ 關(guān)閉 ” 按鈕的程序代碼 雙擊 IDD_CSOCKCLIENT_DIALOG對話框中的“ 關(guān)閉 ” 按鈕 , 添加以下代碼: void CCSockClientDlg::OnExit(?) { //關(guān)閉 Socket (2)。 //關(guān)閉對話框 EndDialog(0)。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 上述步驟完成后,調(diào)試程序并建立可執(zhí)行的 ?.EXE文件。當該項目運行時,彈出如圖 104所示的程序?qū)υ捒?。點擊“ Connect”按鈕,彈出如圖 105所示的對話框,輸入要連接的服務(wù)器的 IP地址和端口號,然后單擊“ OK”按鈕。當連接建立后,就可以在客戶程序?qū)υ捒蛑休斎牖厮托畔ⅲ础?Send”按鈕進行程序測試了。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 圖 104 客戶程序?qū)υ捒? 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 圖 105
點擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1