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

正文內容

vc網(wǎng)絡聊天軟件課程設計-文庫吧資料

2025-07-01 23:47本頁面
  

【正文】 oDataExchange(CDataExchange *pDX)。 代碼如下:// CChatDlg dialoginclude include //CChatDlg 對話框class CChatDlg : public CDialog{//構造public: CChatDlg(CWnd* pParent = NULL)。4) 發(fā)送按鈕消息的響應函數(shù)。完成服務器的連接,調用CClientSocket 類的 Connect 函數(shù)來實現(xiàn),同時對連接返回的信息進行處理。1) 程序開始運行,進行對話框的初始化是在 OnInitDialog()函數(shù)中實現(xiàn)的,在開始的時候自動獲得本地機器的 IP 地址并顯示在 IP Address Control 控件中。dc) const{ CObject::Dump(dc)。 }}//CMsg diagnosticsif def_DEBUGvoid CMessg::AssertValid() const{ CObject::AssertValid()。ar){ if (()) { arm_strText。}CMessg::~CMessg(){}//CMessg 成員函數(shù)void CMessg::Init(){ m_strText = _T()。endif}。 virtual void Dump(CDumpContext amp。ar)。public: virtual ~CMessg()。public: CString m_strText。}CMessgCMessg 類主要作用是實現(xiàn)信息的串行化,方便信息的傳輸。 }void CServerSocket::OnAccept(int nErrorCode)31{ m_dlgProcessPendingAccept()。 } m_dlgSetDlgItemText(IDC_SHOWTEXT,Serverr Has Been Set OK!)。 } if(thisListen()==FALSE) { AfxMessageBox(Server Listen Error)。 if(Create(m_uPort)==FALSE) { AfxMessageBox(_T(Server Socket Create Error))。 的代碼如下:include include include include 30// CServerSocketCServerSocket::CServerSocket(){}CServerSocket::~CServerSocket(){}//CServerSocket 成員函數(shù)BOOL CServerSocket::Init(UINT port,CChatDlg *dlg){ m_uPort=port。public: virtual void OnAccept(int nErrorCode)。 UINT m_uPort。 virtual ~CServerSocket()。 的代碼如下:// CServerSocket mand targetclass CChatDlg。 } return result。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。}CString CClientSocket::ErrorReason(int tag) //錯誤信息的宏定義{ CString result。 f3=。 f1=。inAddr,lpAddr,4)。 //獲取 IP if(lpAddr) { struct in_addr inAddr。 return GetLastError()。f3)//獲得IP 地址{26 struct hostent FAR *lpHostEnt=gethostbyname(sHostName)。f1,BYTE amp。sHostName,BYTE amp。 } return 0。 sIpAddress=i_ntoa(inAddr)。 memmove(amp。 } LPSTR lpAddr=lpHostEnth_addr_list[0]。 if(lpHostEnt==NULL) { //產(chǎn)生錯誤 sIpAddress=_T()。sHostName,CString 25amp。 return 0。 return GetLastError()。 nRetCode=gethostname(szHostName,sizeof(szHostName))。sHostName){ char szHostName[256]。 CSocket::OnClose(nErrorCode)。 CloseSocket()。 m_bClose=true。 } Close()。 } if(m_sfSocketFile) { delete m_sfSocketFile。 } if(m_aSessionOut) { delete m_aSessionOut。 }}/**CloseSocket()函數(shù)的實現(xiàn)*主要功能:*關閉套接字的連接23*/void CClientSocket::CloseSocket(){ if(m_aSessionIn) { delete m_aSessionIn。 m_dlgCloseSessionSocket()。 } else { m_bClose=true。 m_aSessionOutFlush()。 thism_dlg=dlg。 m_aSessionOut=new CArchive(m_sfSocketFile,CArchive::store)。}void CClientSocket::Init(CChatDlg *dlg){ m_sfSocketFile=new CSocketFile(this)。temp)。) { CClientSocket *t=(CClientSocket*) m_dlg(pos)。 if(!m_dlgm_bClient) { for(POSITION pos=m_dlg()。 int linenum=((CEdit*)21 (m_dlgGetDlgItem(IDC_SHOWTEXT)))GetLineCount()。fclose(fp)。fp = fopen(,a+)。m_dlgSetDlgItemText(IDC_SHOWTEXT,m_dlgm_sMsgList)。 m_dlgm_sMsgList+=+\r\n。 //OnReceive()函數(shù)的實現(xiàn) do {CMessg temp。 if(m_sfSocketFile) delete m_sfSocketFile。}CClientSocket::~CClientSocket(){ if(m_aSessionIn) delete m_aSessionIn。 m_bInit=false。m_aSessionOut=NULL。protected:}。public: CClientSocket()。public: virtual void OnReceive(int nErrorCode)。f3)。f1,BYTE amp。sHostName,BYTE amp。sIpAddress)。 //獲得本地19計算機名稱 static int GetIpAddress(const CString amp。public: static int GetLocalHostName(CString amp。 BOOL SendMessage(CMessg *msg)。 //是否進行了初始化 bool m_bClose。 CChatDlg *m_dlg。 CArchive *m_aSessionOut。類定義代碼如下:include //命令目標class CChatDlg。其中,CChatApp 和 CAboutDlg 由 AppWizard 實現(xiàn);另外,CServerSocket 和 CClientSocket 分別負責服務端和客戶端的網(wǎng)絡通信功能;CChatDlg 為程序的主控類,主界面、通信方式及程序邏輯均由該類實現(xiàn),它繼承自 CDialog 類;CMessgage 是對消息的封裝。右半邊有歷史記錄顯示框、歷史記錄顯示按鈕。其中包含文檔編輯框、按鍵控件、靜態(tài)文本控件組成。 聊天程序的實現(xiàn)(1)首先啟動 Visual C++ ,利用 MFC AppWizard[EXE]建立一個新的MFC 工程,工程名為 chat,在 MFC AppWizard Step1 的時候選擇 Dialog based 即基于對話框,在 Step4 時勾選 Windows Sockets 選項(如 圖表 02) ,其他默認值下一步。實現(xiàn)諸如:手動輸入 IP 和用戶名、頭像切換、心情書寫、表情輸入、軟件皮膚切換、注銷登錄、保存聊天記錄以及伸縮界面等功能。同時,服務器端應該有一定的管理功能,如手動/自動響應申請、設置服務器名稱和服務器端口、在線名單統(tǒng)計、單獨斷開某人連接以及保持聊天記錄等功能。當然也需要用戶界面(客戶端) 。14我們利用 MFC 提供的 CSocket 類來編程實現(xiàn)一個網(wǎng)絡聊天室??偟膩碚f,我認為 TCP 協(xié)議更能滿足目前各行業(yè)對遠程數(shù)據(jù)傳輸?shù)囊螅峁└€(wěn)定更便利的傳輸通道,滿足了對安全性的要求以及遠程數(shù)據(jù)傳輸?shù)囊蟆3绦蛄鞒虉D如下:13 方案比較結果TCP 與 UDP 最基本的區(qū)別在于基于連接與無連接,相比之下,第一種方案對系統(tǒng)的要求以及數(shù)據(jù)量都比較大,但是保證數(shù)據(jù)的正確性與數(shù)據(jù)順序,在傳輸大量數(shù)據(jù)的時候具有更高的可靠性??蛻舳顺绦蚓帉懥鞒倘缦拢?) 創(chuàng)建套接字(socket) ;2) 向服務器發(fā)送數(shù)據(jù)(sengto) ;3) 關閉套接字。服務端程序編寫流程如下:1) 創(chuàng)建套接字(socket) ;2) 將套接字綁定到一個本地地址和端口上(bind) ;3) 等待接受數(shù)據(jù)(recvfrom) ;4) 關閉套接字。它是面向非連接的協(xié)議,它不與對方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去。這樣,對服務器端來說,一旦建立連接之后,實際上它已經(jīng)保存了客戶端的 IP 地址和端口號的信息,就可以利用所返回的套接字調用 send/recv 函數(shù)與客戶端進行通信。因為服務器需要接受客戶端的請求,所以必須告訴本地主機它打算在哪個 IP 地址和哪個端口上等待客戶要求,因此必須調用 bind 函數(shù)來實現(xiàn)這一功能。在服務器端,當調用 accept 函數(shù)時,程序就會等待,等待客戶調用connect 函數(shù)發(fā)出連接請求,然后服務器端接受該請求,于是雙方就建立了連11接。程序方案比較: 方案一:基于 TCP 的 socket 編程TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議,也就是說,在正式收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。2) 把用戶輸入的信息及時發(fā)送到服務端,同時準備好接受,并顯示信息。103) 監(jiān)控連接狀態(tài),客戶離開或故障時從列表中刪除相應表項,并及時更新連接表。 服務端需要完成的三件事1) 在特定端口等待連接請求,并需要維護一個客戶連接表,已記錄所有成功連接。 ?、?通訊完畢后,銷毀 CSocket 對象。客戶端需要重載 OnReceive(int i) 和 OnClose(int i);服務器端需要重載 OnAccept(int i) 、OnClose(int
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1