聊天室程序VC-MFC.doc_第1頁
聊天室程序VC-MFC.doc_第2頁
聊天室程序VC-MFC.doc_第3頁
聊天室程序VC-MFC.doc_第4頁
聊天室程序VC-MFC.doc_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

網(wǎng)絡程序設計課 程 設 計 報 告 書題 目: 簡單的聊天程序 專 業(yè): 網(wǎng)絡工程 題目:簡單的聊天程序本題是一個簡單的聊天室程序,采用客戶/服務器模式,分為客戶端程序和服務器端程序。由于服務器只能支持一個客戶,實際上是一個點對點通信的程序??蛻舳顺绦蚝头掌鞒绦蛲ㄟ^網(wǎng)絡交換聊天字符串內(nèi)容,并在窗口的列表框中顯示。本實例程序的技術要點是:l 如何從CasyncSocket類派生出自己的WinSock類。l 理解WinSock類與應用程序框架的關系。l 重點學習流式套接字對象的使用。l 處理網(wǎng)絡事件的方法。它是基于SOCKET的局域網(wǎng)通信是一種靈活的、易于實現(xiàn)的、低成本的方法。在SOCKET API的幫助下,開發(fā)基于SOCKET的局域網(wǎng)通信軟件也是易于實現(xiàn)的。一、設計內(nèi)容1、設計目的綜合運用本課程及計算機網(wǎng)絡的相關知識設計并實現(xiàn)一個網(wǎng)絡應用程序,以Visual C+作為開發(fā)平臺,通過實踐復習鞏固課堂所學的理論知識,提高對所學知識的綜合應用能力。2、 設計要求 采用客戶/服務器模式,分為客戶端程序和服務器端程序。由于服務器只能支持一個客戶,實際上是一個點對點通信的程序。其既是服務器又是客戶端,在兩臺計算機上運行。2、 設計原理 通過socket()系統(tǒng)調用創(chuàng)建一個Socket數(shù)組后(即設定了接受連接客戶的最大數(shù)目),與指定的本地端口綁定bind(),就可以在端口進行偵聽listen()。如果有客戶端連接請求,則在數(shù)組中選擇一個空Socket,將目的地址賦給這個Socket。Socket聊天室基本原理是,拋開CGI(公共網(wǎng)關接口)和www服務器,根據(jù)html規(guī)范,接收到瀏覽器的請求以后,模仿www服務器的響應,將聊天內(nèi)容發(fā)回瀏覽器。在瀏覽器看來就像瀏覽一個巨大的頁面一樣始終處于頁面聯(lián)接狀態(tài), 這就是一個專門的聊天服務器,一個簡化了的www服務器。三、設計過程1、程序設計流程及源代碼(1)流程圖 客戶端 客戶端 目的IP地址 發(fā)送消息 發(fā)送消息 目的IP地址 (2) 源代碼 / ChatDlg.cpp : implementation file/#include stdafx.h#include Chat.h#include ChatDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CChatDlg dialogCChatDlg:CChatDlg(CWnd* pParent /*=NULL*/): CDialog(CChatDlg:IDD, pParent)/AFX_DATA_INIT(CChatDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CChatDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CChatDlg)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CChatDlg, CDialog)/AFX_MSG_MAP(CChatDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BTN_SEND, OnBtnSend)/AFX_MSG_MAPON_MESSAGE(WM_RECVDATA,OnRecvData)END_MESSAGE_MAP()/ CChatDlg message handlersBOOL CChatDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization hereInitSocket();RECVPARAM *pRecvParam=new RECVPARAM;pRecvParam-sock=m_socket;pRecvParam-hwnd=m_hWnd;HANDLE hThread=CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,NULL);CloseHandle(hThread);return TRUE; / return TRUE unless you set the focus to a controlvoid CChatDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CChatDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CChatDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;BOOL CChatDlg:InitSocket()m_socket=socket(AF_INET,SOCK_DGRAM,0);if(INVALID_SOCKET=m_socket)MessageBox(套接字創(chuàng)建失敗!);return FALSE;SOCKADDR_IN addrSock;addrSock.sin_family=AF_INET;addrSock.sin_port=htons(6000);addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);int retval;retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR);if(SOCKET_ERROR=retval)closesocket(m_socket);MessageBox(綁定失??!);return FALSE;return TRUE;DWORD WINAPI CChatDlg:RecvProc(LPVOID lpParameter)SOCKET sock=(RECVPARAM*)lpParameter)-sock;HWND hwnd=(RECVPARAM*)lpParameter)-hwnd;SOCKADDR_IN addrFrom;int len=sizeof(SOCKADDR);char recvBuf200;char tempBuf300;int retval;while(TRUE)retval=recvfrom(sock,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);if(SOCKET_ERROR=retval)break;sprintf(tempBuf,%s說: %s,inet_ntoa(addrFrom.sin_addr),recvBuf);:PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);return 0;void CChatDlg:OnRecvData(WPARAM wParam,LPARAM lParam)CString str=(char*)lParam;CString strTemp;GetDlgItemText(IDC_EDIT_RECV,strTemp);str+=rn;str+=strTemp;SetDlgItemText(IDC_EDIT_RECV,str);void CChatDlg:OnBtnSend() / TODO: Add your control notification handler code hereDWORD dwIP;(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1)-GetAddress(dwIP);SOCKADDR_IN addrTo;addrTo.sin_family=AF_INET;addrTo.sin_port=htons(6000);addrTo.sin_addr.S_un.S_addr=htonl(dwIP);CString strSend;CString xin;GetDlgItemText(IDC_EDIT_RECV,xin);xin+=rn;GetDlgItemText(IDC_EDIT_SEND,strSend);xin+=strSend;SetDlgItemText(IDC_EDIT_RECV,xin);sendto(m_socket,strSend,strSen

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論