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

正文內(nèi)容

vc網(wǎng)絡(luò)聊天軟件課程設(shè)計(jì)-wenkub

2023-07-10 23:47:35 本頁面
 

【正文】 ct) ;3) 和服務(wù)器端進(jìn)行通信(send/recv) ;4) 關(guān)閉套接字。 客戶端需要完成的三件事1) 建立與維護(hù)服務(wù)器的連接,并隨時(shí)監(jiān)測(cè)連接狀態(tài)。 方案比較與選擇 系統(tǒng)分析與設(shè)計(jì)系統(tǒng)構(gòu)架方式如下圖所示:設(shè)計(jì)出一個(gè)完整的網(wǎng)絡(luò)聊天程序,使之實(shí)現(xiàn)以上基本要求。  ?、?重載 CSocket 類的部分函數(shù)。而對(duì)于服務(wù)端程序,必須在調(diào)用 Create 時(shí)指定一個(gè)端口。以下介紹的針對(duì)字節(jié)流型(即基于 TCP/IP 協(xié)議)套接字的操作步驟中,只有第 3 和第 4 步對(duì)于客戶端和服務(wù)端操作是不同的,其他步驟都相同。因此如果需要低層控制和高效率,就使用 CasyncSock 類;如果需要方便,則可使用 CSocket 類。為了給程序員提供更方便的接口以自動(dòng)處理這些任務(wù),MFC 給出 了CSocket 類,這個(gè)類是由 CAsyncSocket 類繼承下來的,它提供了比CAsyncSocket 更高層的 WinSock API 接口。 析構(gòu)函數(shù)在銷毀對(duì)象之前調(diào)用對(duì)象的 Close 成員函數(shù)。不要對(duì)這個(gè)新套接字對(duì)象調(diào)用 Create 。 ③接受連接后,可以執(zhí)行驗(yàn)證密碼等任務(wù)。很可能要始終依賴此參數(shù)的默認(rèn)值。對(duì)于客戶端套接字,通常接受此參數(shù)的默認(rèn)值,該值允許 Windows Sockets 選擇端口。上面的第一個(gè) Create 調(diào)用使用默認(rèn)參數(shù)創(chuàng)建流式套接字,第二個(gè) Create 調(diào)用創(chuàng)建具有指定端口和地址的數(shù)據(jù)文報(bào)套接字。 // Use the default parameters 或 CAsyncSocket* pSocket = new CAsyncSocket。 MFC 的 CAsyncsocket 類和 CSocket 類構(gòu)造一個(gè) CAsyncSocket 對(duì)象并使用該對(duì)象創(chuàng)建基礎(chǔ) SOCKET 句柄。 任何能夠與 Windows Sockets 兼容實(shí)現(xiàn)協(xié)同工作的應(yīng)用程序就被認(rèn)為是具有 Windows Sockets 接口。此外,在一個(gè)特定版本 Windows 的基礎(chǔ)上,Windows Sockets 也定義了一個(gè)二進(jìn)制接口(ABI ) ,以此來保證應(yīng)用 Windows Sockets API 的應(yīng)用程序能夠在任何網(wǎng)絡(luò)軟件供應(yīng)商的符合 Windows Sockets協(xié)議的實(shí)現(xiàn)上工作。并能鞏固和擴(kuò)展之前學(xué)過的知識(shí),進(jìn)行項(xiàng)目的設(shè)計(jì)開發(fā)訓(xùn)練,更好的適應(yīng)社會(huì)的需求。所以網(wǎng)絡(luò)聊天的程序早已被前人所實(shí)現(xiàn),而且實(shí)現(xiàn)的方法多種多樣。所以在課程設(shè)計(jì)動(dòng)員之后,我們就馬不停蹄的通過互聯(lián)網(wǎng)收縮有關(guān)網(wǎng)絡(luò)編程和 MFC 編程的有關(guān)資料。它可以在網(wǎng)絡(luò)環(huán)境下進(jìn)行實(shí)時(shí)的一對(duì)多或多對(duì)多的匿名交談。網(wǎng)絡(luò)聊天室軟件的制作方法有很多種,比如用 MFC 和 Java 等語言設(shè)計(jì)的就有很多,本次課程設(shè)計(jì)主要是利用 MFC 所提供的各種控件尤其是 WinSock 控件,基于 C/S 模式,設(shè)計(jì)了一個(gè)網(wǎng)絡(luò)聊天室,圓滿地實(shí)現(xiàn)在網(wǎng)絡(luò)上實(shí)時(shí)聊天及多種人性化的輔助功能。找到大量資料之后,我們還有根據(jù)課程設(shè)計(jì)的要求進(jìn)行篩選資料,最后選定方案和確定實(shí)現(xiàn)方法。因此,本次課程設(shè)計(jì),我們主要借鑒前人創(chuàng)立的方法和編程經(jīng)驗(yàn)來制作一個(gè) C/S聊天室程序,通過制作該程序達(dá)到的學(xué)習(xí)網(wǎng)絡(luò) socket 編程和使用 MFC 編程的相關(guān)知識(shí)。 5 Winsock 介紹Windows Sockets 規(guī)范以 . Berkeley 大學(xué) BSD UNIX 中流行的 Socket接口為范例定義了一套 Micosoft Windows 下網(wǎng)絡(luò)編程接口。因此這份規(guī)范定義了應(yīng)用程序開發(fā)者能夠使用,并且網(wǎng)絡(luò)軟件供應(yīng)商能夠?qū)崿F(xiàn)的一套庫函數(shù)調(diào)用和相關(guān)語義。我們稱這種應(yīng)用程序?yàn)?Windows Sockets 應(yīng)用程序。 ①套接字的創(chuàng)建:遵循兩階段構(gòu)造的 MFC 模式。int nPort = 27。 (任一個(gè) Create 版本都可以和任一種構(gòu)造方法一起使用。 套接字類型: SOCK_STREAM (默認(rèn)值)或 SOCK_DGRAM 。 ②如果套接字是客戶端,則使用 CAsyncSocket::Connect 將此套接字對(duì)象連接到服務(wù)器套接字。注意 Accept 成員函數(shù)采用對(duì)新的空 CSocket 對(duì)象的引用作為它的參數(shù)。 ④通過調(diào)用 CAsyncSocket 對(duì)象的封裝 Windows Sockets API 函數(shù)的成員函數(shù),與其他套接字進(jìn)行通信。8 利用 CSocket 進(jìn)行有連接的通信微軟的 MFC 把復(fù)雜的 WinSock API 函數(shù)封裝到類里,這使得編寫網(wǎng)絡(luò)應(yīng)用程序更容易。CSocket 類和 CSocketFile 類可以與 CArchive 類一起合作來管理發(fā)送和接收的數(shù)據(jù),這使管理數(shù)據(jù)收發(fā)更加便利。由于我們對(duì)網(wǎng)絡(luò)底層的了解比較淺薄,所以這次課程設(shè)計(jì)我們選擇了采用CSocket 類來編程實(shí)現(xiàn)。  ?、?構(gòu)造一個(gè) CSocket 對(duì)象。需要注意的是,CArchive 類對(duì)象不能與數(shù)據(jù)報(bào)(UDP)套接字一起工作,因此對(duì)于數(shù)據(jù)報(bào)套接字,CAsyncSocket 和 CSocket 的使用方法是一樣的??蛻舳诵枰剌d OnReceive(int i) 和 OnClose(int i);服務(wù)器端需要重載 OnAccept(int i) 、OnClose(int i) 和 OnReceive(int i); ?、?調(diào)用 Send()的方法來發(fā)送數(shù)據(jù),調(diào)用 Receive()的方法來接受數(shù)據(jù)。 服務(wù)端需要完成的三件事1) 在特定端口等待連接請(qǐng)求,并需要維護(hù)一個(gè)客戶連接表,已記錄所有成功連接。2) 把用戶輸入的信息及時(shí)發(fā)送到服務(wù)端,同時(shí)準(zhǔn)備好接受,并顯示信息。在服務(wù)器端,當(dāng)調(diào)用 accept 函數(shù)時(shí),程序就會(huì)等待,等待客戶調(diào)用connect 函數(shù)發(fā)出連接請(qǐng)求,然后服務(wù)器端接受該請(qǐng)求,于是雙方就建立了連11接。這樣,對(duì)服務(wù)器端來說,一旦建立連接之后,實(shí)際上它已經(jīng)保存了客戶端的 IP 地址和端口號(hào)的信息,就可以利用所返回的套接字調(diào)用 send/recv 函數(shù)與客戶端進(jìn)行通信。服務(wù)端程序編寫流程如下:1) 創(chuàng)建套接字(socket) ;2) 將套接字綁定到一個(gè)本地地址和端口上(bind) ;3) 等待接受數(shù)據(jù)(recvfrom) ;4) 關(guān)閉套接字。程序流程圖如下:13 方案比較結(jié)果TCP 與 UDP 最基本的區(qū)別在于基于連接與無連接,相比之下,第一種方案對(duì)系統(tǒng)的要求以及數(shù)據(jù)量都比較大,但是保證數(shù)據(jù)的正確性與數(shù)據(jù)順序,在傳輸大量數(shù)據(jù)的時(shí)候具有更高的可靠性。14我們利用 MFC 提供的 CSocket 類來編程實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)聊天室。同時(shí),服務(wù)器端應(yīng)該有一定的管理功能,如手動(dòng)/自動(dòng)響應(yīng)申請(qǐng)、設(shè)置服務(wù)器名稱和服務(wù)器端口、在線名單統(tǒng)計(jì)、單獨(dú)斷開某人連接以及保持聊天記錄等功能。 聊天程序的實(shí)現(xiàn)(1)首先啟動(dòng) Visual C++ ,利用 MFC AppWizard[EXE]建立一個(gè)新的MFC 工程,工程名為 chat,在 MFC AppWizard Step1 的時(shí)候選擇 Dialog based 即基于對(duì)話框,在 Step4 時(shí)勾選 Windows Sockets 選項(xiàng)(如 圖表 02) ,其他默認(rèn)值下一步。右半邊有歷史記錄顯示框、歷史記錄顯示按鈕。類定義代碼如下:include //命令目標(biāo)class CChatDlg。 CChatDlg *m_dlg。 BOOL SendMessage(CMessg *msg)。 //獲得本地19計(jì)算機(jī)名稱 static int GetIpAddress(const CString amp。sHostName,BYTE amp。f3)。public: CClientSocket()。m_aSessionOut=NULL。}CClientSocket::~CClientSocket(){ if(m_aSessionIn) delete m_aSessionIn。 //OnReceive()函數(shù)的實(shí)現(xiàn) do {CMessg temp。m_dlgSetDlgItemText(IDC_SHOWTEXT,m_dlgm_sMsgList)。fclose(fp)。 if(!m_dlgm_bClient) { for(POSITION pos=m_dlg()。temp)。 m_aSessionOut=new CArchive(m_sfSocketFile,CArchive::store)。 m_aSessionOutFlush()。 m_dlgCloseSessionSocket()。 } if(m_aSessionOut) { delete m_aSessionOut。 } Close()。 CloseSocket()。sHostName){ char szHostName[256]。 return GetLastError()。sHostName,CString 25amp。 } LPSTR lpAddr=lpHostEnth_addr_list[0]。 sIpAddress=i_ntoa(inAddr)。sHostName,BYTE amp。f3)//獲得IP 地址{26 struct hostent FAR *lpHostEnt=gethostbyname(sHostName)。 //獲取 IP if(lpAddr) { struct in_addr inAddr。 f1=。}CString CClientSocket::ErrorReason(int tag) //錯(cuò)誤信息的宏定義{ CString result。 break。 break。 break。 break。 break。 break。 break。 break。 } return result。 virtual ~CServerSocket()。public: virtual void OnAccept(int nErrorCode)。 if(Create(m_uPort)==FALSE) { AfxMessageBox(_T(Server Socket Create Error))。 } m_dlgSetDlgItemText(IDC_SHOWTEXT,Serverr Has Been Set OK!)。}CMessgCMessg 類主要作用是實(shí)現(xiàn)信息的串行化,方便信息的傳輸。public: virtual ~CMessg()。 virtual void Dump(CDumpContext amp。}CMessg::~CMessg(){}//CMessg 成員函數(shù)void CMessg::Init(){ m_strText = _T()。 }}//CMsg diagnosticsif def_DEBUGvoid CMessg::AssertValid() const{ CObject::AssertValid()。1) 程序開始運(yùn)行,進(jìn)行對(duì)話框的初始化是在 OnInitDialog()函數(shù)中實(shí)現(xiàn)的,在開始的時(shí)候自動(dòng)獲得本地機(jī)器的 IP 地址并顯示在 IP Address Control 控件中。4) 發(fā)送按鈕消息的響應(yīng)函數(shù)。protected: virtual void DoDataExchange(CDataExchange *pDX)。 afx_msg void OnPaint()。public: CString name。 bool m_bClient。 CString m_sMsgList。 void ClearContent()。public: afx_msg void OnBnClickedButton1()。CString LiaoTianJiLu。protected: DECLARE_MESSAGE_MAP()}。m_hIcon = AfxGetApp()LoadIcon(IDR_MAINFRAME)。}void CChatDlg::DoDataExchange(CDataExchange *pDX){ CDialog::DoDataExchange(pDX)。 DDX_Text(pDX,IDC_PORT,m_uPort)。 pDCSetTextColor(RGB(165,165,165))。 ASSERT((IDM_ABOUTBOX amp。 if(pSysMenu!=NULL) { CString strAboutMenu。40 } } SetIcon(m_hIcon,TRUE)。 // 獲取 IP 控
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1