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

正文內(nèi)容

第10章160網(wǎng)絡(luò)程序設(shè)計實例-在線瀏覽

2024-11-10 16:13本頁面
  

【正文】 息 sendto(s1,sendBuf,strlen(sendBuf),0,(struct sockaddr *) amp。 break。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 程序運行結(jié)果 在這兩個程序調(diào)試 、 編譯和鏈接正確后 , 就可以執(zhí)行這兩個程序了 。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 (a) ?UDP程序 1的窗口 (b) ?UDP程序 2的窗口 圖 101 UDP程序執(zhí)行后的窗口 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 程序執(zhí)行后就可以檢查它們所實現(xiàn)的功能了 。 同樣 , 如果在 UDP程序 2的窗口中點擊鼠標(biāo)左鍵 , 則可以發(fā)送數(shù)據(jù)給 UDP程序 1, UDP程序 1在收到 UDP程序 2發(fā)送的數(shù)據(jù)后 , 彈出如圖 102(b)所示的窗口 。 (2) 這兩個程序的功能是一樣的 , 所以代碼幾乎是相同的 。 創(chuàng)建客戶端程序的主要步驟介紹如下 。 2. 設(shè)計程序?qū)υ捒? 如圖 103所示 。 //是否連接 UINT m_nLength。 //消息緩沖區(qū) 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 6. 重載 (1) ?MySock(?)函數(shù)重載的代碼如下: MySock::MySock(?) { m_nLength=0。 m_bConnected=FALSE } MySock::~MySock(?) { //關(guān)閉套接字 if(m_hSocket!=INVALID_SOCKET) Close(?)。 //下面兩行代碼用來獲取對話框指針 CCSockClientApp* pApp=(CCSockClientApp*)AfxGetApp(?)。 pDlg(0,m_szBuffer)。 CAsyncSocket::OnReceive(nErrorCode)。 m_nLength=0。 //繼續(xù)提請一個 39。讀 39。的網(wǎng)絡(luò)事件 , 接收 Server消息 AsyncSelect(FD_READ)。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 (4) ?OnConnect(?)函數(shù)重載的代碼如下: void MySock::OnConnect(int nErrorCode) { if (nErrorCode==0) { m_bConnected=TRUE。 CCSockClientDlg* pDlg=(CCSockClientDlg*)pAppm_pMainWnd。 strncat(m_szBuffer,pDlgm_szServerAdr, sizeof(pDlgm_szServerAdr))。 //提請一個 39。讀 39。的網(wǎng)絡(luò)事件 , 準(zhǔn)備接收 AsyncSelect(FD_READ)。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 7. 新建一個輸入地址的對話框 新建一個輸入地址信息的對話框 IDD_Addr用來輸入 IP地址和端口號;生成一個新的基于對話框的類 CAddrDlg。 使用類向?qū)?(ClassWizard)為 CAddrDlg類添加 m_Addr和m_Port兩個類變量 。 MySock m_clientSocket。 public: char m_szServerAdr[256]。 =INVALID_SOCKET。 CAddrDlg m_Dlg。 if ((?)==IDOK amp。 !(?)) 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 { memcpy(m_szServerAdr,sizeof(m_szServerAdr))。 //建立計時器 , 每 1秒嘗試連接一次 , 直到連上或 TryCount10 SetTimer(1,1000,NULL)。 } } 第 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)。 (?)。 return。 TryCount++。 if (TryCount =10) AfxMessageBox(Connect Failed!)。 } CDialog::OnTimer(nIDEvent)。 (FD_WRITE)。 } } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 13. 添加 “ 關(guān)閉 ” 按鈕的程序代碼 雙擊 IDD_CSOCKCLIENT_DIALOG對話框中的“ 關(guān)閉 ” 按鈕 , 添加以下代碼: void CCSockClientDlg::OnExit(?) { //關(guān)閉 Socket (2)。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 上述步驟完成后,調(diào)試程序并建立可執(zhí)行的 ?.EXE文件。點擊“ Connect”按鈕,彈出如圖 105所示的對話框,輸入要連接的服務(wù)器的 IP地址和端口號,然后單擊“ OK”按鈕。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 圖 104 客戶程序?qū)υ捒? 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 圖 105 地址信息輸入對話框 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 創(chuàng)建服務(wù)器端程序 1. 建立一個 CAsyncSocket的子類 在本例中 , 由于我們要實現(xiàn)的是一個回聲程序 , 所以服務(wù)器程序應(yīng)將收到的信息原封不動地發(fā)送給客戶程序 。 建立一個 CAsyncSocket類的子類 CNewSocket, 并重載CAsyncSocket類的 OnReceive(?)和 OnSend(?)函數(shù) 。 在 : public: CNewSocket* m_pSocket; OnAccept(?)程序的代碼如下: void CMyServerSocket:: OnAccept(int nErrorCode) 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 { //偵聽到連接請求 , 調(diào)用 Accept函數(shù) CNewSocket* pSocket = new CNewSocket(?); if(Accept(*pSocket)) { pSocketAsyncSelect(FD_READ); m_pSocket=pSocket; } else delete pSocket; } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 3. 為對話框添加一個 “ 偵聽 ” 按鈕 為對話框添加一個 “ 偵聽 ” 按鈕 , 并添加如下代碼 。 OnListen(?)函數(shù)的代碼如下: void CCSockServerDlg:: OnListen(?) { if(==INVALID_SOCKET) { BOOL bFlag= (UserPort, SOCK_STREAM, FD_ACCEPT); if(!bFlag) 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 { AfxMessageBox(39。Socket Error!39。); (?); PostQuitMessage(0); Return; } } //?39。偵聽 39。成功 , 等待連接請求 if(!(1)) 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 { int nErrorCode = (?); if (nError!=WSAEWOULDBLOCK) { AfxMessageBox(39。Socket Error!39。); (?); PostQuitMessage(0); Return; } } } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 基于 WinI API的 客戶程序編寫實例 應(yīng)用程序說明 編程環(huán)境: VC++ 。 當(dāng)然用戶也可以隨便輸入一個域名 ,看是否在 Inter中有該域名的服務(wù)器 。 在該程序中我們建立一個基于對話框的用戶界面 。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 圖 106 創(chuàng)建一個 WinI應(yīng)用程序 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 (2) 在彈出的 “ MFC AppWizardstep 1”對話框中 , 選擇基于對話框的 (Dialog Based)應(yīng)用程序類型 , 然后單擊 “ 下一步 ” 按鈕 。 (4) 在彈出的 “ MFC AppWizardstep 3 of 4”對話框中 ,選擇 MFC所使用的鏈接庫 , 一般選擇靜態(tài)鏈接庫 , 再單擊“ 下一步 ” 按鈕 。 2. 編程對話框 (1) 添加一個顯示輸出結(jié)果的編輯框 。如在 “ Styles”選項卡中 , 選中圖 107所示的 “ Mutiline”等屬性 。 用與上面類似的方法再增加另一個編輯框 , 編輯框的 ID標(biāo)志設(shè)為 IDC_EDIT2, 然后在屬性對話框中選擇 “ Mutiline”和 “ Want return”屬性 。 在對話框上的恰當(dāng)位置添加 5個按鈕 , 這 5個按鈕分別用來實現(xiàn) HTTP、 FTP、 Gopher、FINGER和 WHOIS查詢功能 , 它們的 ID標(biāo)志分別設(shè)置為IDC_BUTTON_HTTP 、 IDC_BUTTON_FTP 、IDC_BUTTON_GOPHER、 IDC_BUTTON_ FINGER和 IDC_BUTTON_WHOIS。最后的結(jié)果如圖 108所示。 為了簡單起見 , 我們可以使用“ ClassWizard”給編輯框添加變量 。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 2. HTTP協(xié)議查詢代碼 給對話框類 CScanDlg添加一個函數(shù) , 用于實現(xiàn)HTTP查詢 。 其實現(xiàn)代碼為: void CScanDlg::TryURL(CString URL) { CInterSession session。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 UpdateData(FALSE)。 try { file=(CInterFile*)(URL)。 pExDelete(?)。 \r\n。 for(int i=0。amp。i++) { m_out+=line+\r\n。 delete file。 } m_out+=\r\n。 } 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 下面 , 我們分析一下這個函數(shù)是如何實現(xiàn) HTTP鏈接的 。其構(gòu)造函數(shù)的原形如下: CInterSession(LPCTSTR pstrAgent=NULL, DWORD dwContext=1, DWORD dwAccessType=INTERNET_OPEN_TYPE_PRECONFIG, LPCTSTR pstrProxyName=NULL, LPCTSTR pstrProxyBypass=NULL, DWORD dwFlags=0)。 CInterSession構(gòu)造函數(shù)參數(shù)說明如下: ● ?LPCTSTR pstrAgent:應(yīng)用程序名 , 如果為 NULL,將填入在 AppWizard中給定的程序名 。 ● ?DWORD dwAccessType:訪問類型 , 可以為以下參數(shù)之一: INTERNET_OPEN_ TYPE_PRECONFIG(default),INTERNET_OPEN_TYPE_DIRECT或 INTERNET_OPEN_ TYPE_PROXY。 ● LPCTSTR pstrProxyBypass :如訪問類型為INTERNET_OPEN_TYPE_PROXY, 則該參數(shù)為不通過協(xié)議服務(wù)器而直接鏈接的一系列地址 。T_CACHE, INTERNET_ FLAG_ASYNC和 INTERNET_FLAG_OFFLINE。 顯然 , 程序允許使用者定義訪問類型將比由程序內(nèi)部直接定義要好 。 (2) 雙擊 “ 控制面板 ” 。 (4) 在隨后彈出的對話框中選擇 “ 連接 ” , 然后填寫網(wǎng)絡(luò)連接屬性 。 第 10章 網(wǎng)絡(luò)程序設(shè)計實例 注意 :如果所使用的計算機已經(jīng)接入 Inter, 則不需要進行如上設(shè)置 。 在構(gòu)造對象 session后 , 如下兩行程序進行輸出提示
點擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1