面向網(wǎng)絡(luò)的聊天程序_第1頁
面向網(wǎng)絡(luò)的聊天程序_第2頁
面向網(wǎng)絡(luò)的聊天程序_第3頁
面向網(wǎng)絡(luò)的聊天程序_第4頁
面向網(wǎng)絡(luò)的聊天程序_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、面向網(wǎng)絡(luò)的聊天程序設(shè)計文檔規(guī)格說明書目錄1. 引言31.1編寫目的31.2參考文獻(xiàn)32. 綜合描述32.1功能描述32.2客戶端32.3服務(wù)端53. 核心技術(shù)63.1 ide63.2 socket api63.3開發(fā)原理73.4開發(fā)截圖83.4.1客戶端83.4.2服務(wù)器端104. 使用方法124.1啟動服務(wù)器124.2啟動客戶端124.3 ip設(shè)置事項135. 核心代碼135.1服務(wù)端代碼135.1客戶端代碼156. 生成程序176.1服務(wù)端程序176.2客戶端程序17本文檔是建立在windows平臺基礎(chǔ)上,結(jié)合visual studio .net 2005技術(shù),編撰了一個 網(wǎng)絡(luò)聊天程序。它

2、具體的可以分為兩個部分:(1) chatroomclient : (2) chatroomservero1.1. 編寫目的編寫此平臺技術(shù)文檔的目的是為了讓讀者對該網(wǎng)絡(luò)聊天程序有一個完整、準(zhǔn)確的認(rèn)識。1.2. 參考文獻(xiàn)socket api2.綜合描述2丄功能描述通過使用本應(yīng)用程序,可以在internet ±實(shí)現(xiàn)網(wǎng)絡(luò)聊天。用戶只需在電腦前安裝客戶端 程序即可實(shí)現(xiàn)聊天功能。主要有兩部分組成:chatroomclient客戶端,(2) chatroomserver 服務(wù)端。下面詳細(xì)描述他們。2.2客戶端實(shí)現(xiàn)端到端的鏈接,通過一個窗口固定聊天者的昵稱,綁定服務(wù)器的ip地址和端口信息。 下面是兩

3、個客戶端得登錄窗口,如下圖所示:登錄窗口兩個客戶輸入昵稱和服務(wù)器地址后就進(jìn)入如下的聊天界面:華峰華峰華峰華峰華峰華峰 馬一高彥高彥高彥高彥高彥高 石李石李石李石李石李石李退出i你好;在哪里啊?呵呵,我在教室看書呢?哦這么努力啊,忸服.看什么書? 當(dāng)然是我導(dǎo)師的書,網(wǎng)絡(luò)爬蟲方面的。 呵呵j哦。你呢,整天忙活啥子呢?我在看編程方面的書呵呵java j2me j2ee恩很好啊呵呵石彥華 我要發(fā)言:2.3服務(wù)端通過啟動服務(wù)器,來連接internet網(wǎng)上兩臺pc機(jī)的鏈接。使遠(yuǎn)端的pc機(jī)可以登錄到服務(wù)器, 與另一端進(jìn)行連接。它有三個功能,啟用、停止、退出。如下圖所表示:連接吋,只需點(diǎn)擊“啟用”按鈕即可以。

4、然后在兩個客戶端輸入服務(wù)器端的ip,就可以連接 上了。3 核心技術(shù)3.1 ide較早期程序設(shè)計的各個階段都要用不同的軟件來進(jìn)行處理,如先用字處理軟件編 輯源程序,然后用鏈接程序進(jìn)行函數(shù)、模塊連接,再用編譯程序進(jìn)行編譯,開發(fā)者必須 在幾種軟件i'可來回切換操作。現(xiàn)在的編程開發(fā)軟件將編輯、編譯、調(diào)試等功能集成在 一個桌面環(huán)境中,這樣就大大方便了用戶。這就是集成開發(fā)環(huán)境一ide。集成開發(fā)環(huán)境(簡稱ide integrated develop environment )是用于提供程序 開發(fā)環(huán)境的應(yīng)用程序,一般包括代碼編輯器、編譯器、調(diào)試器和圖形用戶界面工具。 他集成了代碼編寫功能、分析功能、編

5、譯功能、調(diào)試功能等一體化的開發(fā)軟件服務(wù)套。 所有具備這一特性的軟件或者軟件套(組)都可以叫做集成開發(fā)環(huán)境。如微軟的vis ual studio系列,borland的c+ builder、delphi系列等。該程序可以獨(dú)立運(yùn)行, 也可以和其它程序并用。ide為用戶使用visual basic java和powerbuilder等現(xiàn) 代編程語言提供了方便。不同的技術(shù)體系有不同的ide。比如visual studio.net可以 稱為c+、vb、c#等語言的集成開發(fā)環(huán)境,所以visual studio.net可以叫做ide。ide多被用于開發(fā)軟件的應(yīng)用開發(fā),代碼的編輯、調(diào)試和運(yùn)行。本程序在設(shè)計面 向

6、網(wǎng)絡(luò)的聊天程序時使用idevisual studio .net 2005,開發(fā)基于基于網(wǎng)絡(luò)的端到 端的聊天程序,在設(shè)計時有很多項任務(wù)會自動生成,拖動標(biāo)簽后代碼會自動生成,非 常的方便.visual studio.net 2005集成開發(fā)環(huán)境集代碼編輯,代碼生成,界面設(shè)計, 調(diào)試,編譯等功能,目前還融合了建模功能,具有強(qiáng)大的開發(fā)能力。3.2 socket api所謂socket通常也稱作“套接字“,用于描述ip地址和端口,是一個通信鏈的句 柄。應(yīng)用程序通常通過“套接字“向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求?;诳蛻舴?wù)器 模式的通信可以把 socket 分成 clientsocket 和 server

7、socketo clientsocket 用于 客戶端,serversocket用于服務(wù)器端,socket是建立網(wǎng)絡(luò)連接時使用的。在連接成 功時,應(yīng)用程序兩端都會產(chǎn)生一個socket實(shí)例,操作這個實(shí)例,完成所需的會話。 對于一個網(wǎng)絡(luò)連接來說,套接字是平等的,并沒有差別,不因?yàn)樵诜?wù)器端或在客戶 端而產(chǎn)生不同級別。不管是clientsocket還是serversocket,它們的工作都是通過 socketlmpl類及其子類完成的。重要的 socket api: w.socket 繼承于 window.lang.object,有八個 構(gòu)造器,其方法并不多,下面介紹使用最頻繁的三個方法。accept

8、方法用于產(chǎn)生”阻塞”,直到接受到一個連接,并且返回一個客戶端的soc ket對象實(shí)例。”阻塞”是一個術(shù)語,它使程序運(yùn)行暫吋”停留”在這個地方,直到一個會 話產(chǎn)生,然后程序繼續(xù);通?!弊枞笆怯裳h(huán)產(chǎn)生的。getlnputstream方法獲得網(wǎng)絡(luò)連接輸入,同吋返回一個lutputstream對象實(shí)例。 getoutputstream方法連接的另一端將得到輸入,同時返回一個outputstream 對象實(shí)例。注意:其屮getlnputstream和getoutputstream 方法均會產(chǎn)生一個 loexception,它必須被捕獲,因?yàn)樗鼈兎祪盏牧鲗ο?,通常都會被另一個流對象使 用。3.3開發(fā)原

9、理如何開發(fā)一個server-client模型的程序 開發(fā)原理:服務(wù)器,使用serversocket監(jiān)聽指定的端口,端口可以隨意指定(由于1024 以下的端口通常屈于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大 于1024的端口),等待客戶連接請求,客戶連接后,會話產(chǎn)生;在完成會話后,關(guān) 閉連接。客戶端,使用socket對網(wǎng)絡(luò)上某一個服務(wù)器的某一個端口發(fā)出連接請求,一旦 連接成功,打開會話;會話完成后,關(guān)閉socketo客戶端不需要指定打開的端口, 通常臨時的、動態(tài)的分配一個1024以上的端口。socket接口是tcp/ip網(wǎng)絡(luò)的api, socket接口定義了許多函數(shù)或例程,程序員

10、 可以用它們來開發(fā)tcp/ip網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué)internet ±的tcp/ip網(wǎng)絡(luò)編程, 必須理解socket接口。socket接口設(shè)計者最先是將接口放在unix操作系統(tǒng)里面的。 如果了解unix系統(tǒng)的輸入和輸出的話,就很容易了解socket t 0網(wǎng)絡(luò)的socket數(shù) 據(jù)傳輸是一種特殊的i/o, socket也是一種文件描述符。socket也具有一個類似于打 開文件的函數(shù)調(diào)用socket(),該函數(shù)返回一個整型的socket描述符,隨后的連接建 立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該socket實(shí)現(xiàn)的。常用的socket類型有兩種:流式socket (sock_stream)和數(shù)據(jù)報

11、式socket (sock_dgram)。流式是一種面向連接的socket,針對于面向連接的tcp服務(wù) 應(yīng)用;數(shù)據(jù)報式socket是一種無連接的socket,對應(yīng)于無連接的udp服務(wù)應(yīng)用。 socket建立為了建立socket,程序可以調(diào)用socket函數(shù),該函數(shù)返回一個類似于文 件描述符的句柄。socket 函數(shù)原 型為:int socket(int domain, int type, int protocol);domain指明所使用的協(xié)議族,通常為pfjnet,表示互聯(lián)網(wǎng)協(xié)議族(tcp/ip 協(xié)議族);type 參數(shù)指定 socket 的類型:sock_stream 或 sock_dgr

12、am, socket 接口還定義了原始socket (sock_raw),允許程序使用低層協(xié)議;protocol通常 賦值”0”。socket()調(diào)用返回一個整型socket描述符,你可以在后面的調(diào)用使用它。 socket描述符是一個指向內(nèi)部數(shù)據(jù)結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用socket 函數(shù)時,socket執(zhí)行體將建立一個socket,實(shí)際上"建立一個socket"意味著為一個 socket數(shù)據(jù)結(jié)構(gòu)分配存儲空間。socket執(zhí)行體為你管理描述符表。兩個網(wǎng)絡(luò)程序之 間的一個網(wǎng)絡(luò)連接包括五種信息:通信協(xié)議、本地協(xié)議地址、本地主機(jī)端口、遠(yuǎn)端主 機(jī)地址和遠(yuǎn)端協(xié)議端口。soc

13、ket數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。socket在測量軟件中 的使用也很廣泛3.4開發(fā)截圖3.4.1客戶端1類視圖chatroo*client licrosoft visual studio win32文件q)觀s)&)頊目u)生成)調(diào)試)工具d)測試(s)窗口纜)社區(qū)© 幫肋qdj1 占 心. debycwmtcieddlg.h | chtrogclintinx.h j cliglsocktt. h zckat*omcli ent. hi仗局范03)-ckatbooacli ent-映射s宏和常量 v全局函數(shù)和受呈冷 caboutdlc七畫2皿盍beq2sx$ cchatroo

14、ncli entdlc 綽 cclientsocket 勺 cconnecttddlg (b r映射 麗口基真型 護(hù) _unnsdj)09930ll308 chatrococlient. h : t»ain head" file for the ckatrocwclient application i":劃 f 丨 dofinad(afx_ckatroomcliun,_h_4503fodd_ca95_4f24.b8ee_3t83b84b095b_i»cluded_) tdefine aklchatsooficlimtj(鈕f0dd.ca95,f2jb6e

15、e.3183§6<u»96b_:uclumd_:j#i£ _rsc_ver > 1000«nce#cnd:£ fisc m > 100)ffifnd«f _kfivin_h_error include z stda£x. hz before including this file for pcm #«nda f<includ« ""soygh"/ mtin sgbols/ cchtroonclx entapp/ see chtroonclient cp

16、p for the inplentatin of this class/clss cchfttrooncliontapp : public cyxnapppublic:申 overridescchatro oncl 1app 0 ;wi nt ann fvni hl辺用.艮方姿y一習(xí)英視g乙朿忖首卻*輸岀 q x顯示以下輸出$):生成 3馬$國chatroobclient - licrosoft visual studio文件q) tssgij)視819 頂目 生成 調(diào)試)工貝 測試 曾口毬)社區(qū)© 割助qp3 日二日孑a20: doby 恥22號代斫定義氐【:半二說用勺宛訂二満岀3

17、屬性管理器視圖chatroobclient - licrosoft vixual studio文件電)»15 «2)觀e)電)項目©)生成辺)調(diào)試©)工具(!)和試 自口迥 社區(qū)© 幫助01)» debuc win32t tj3 chetroonclint(ddob曾 | win32n upgrade fron yc 6. 0id optin:z« for zp««d id dynan: c link to mfcid hulti-byto charactar support q roloaza | yi

18、n32u* upgrade fron vc 6. 0jal optin: z« for speedhl dyntnic link to mfcid wulti-byt« character supportcoxmactcddlg. hchatrococlicntdlg. hclxentsockot. h chatkooacli ant. h xj &局范困)7v q xs/ chttroc<icli«nt. h : n.in ht&d«r file for th* ckatroomcliemt application i"

19、h#if »de£ined()j_cmatra»cliehtj<_4503f0dd_ca95_4f24jsez_31&3b84b095b_jhcluded_) afx chatroohcuein h 45g3f0dd ca95 4f24 b6ee 3183b64oj95b ibtluded;#if -rsc-ver > !000once#«ndsf / jisc.ver > 1003#ifndef _anvin_h_terror include z xtd*fx. hz b«£or including thi

20、s file for pch fendif4®敢8»同箔oj熔8>e#include "resource, h*/ main symbols/ cchfttrooncli «nt app/ see chatkooncl 1 ent. cpp for the inpl«tiezxtoition of this classaclss cchatrocadientapp public cvinapppublic:cchatrooncli«ntapp 0;申 overrides敏出顯示以下諭岀$)生成入囹p正在茨譯55ss5單1正在服i

21、正在鍛入済草1 )*0$ 日志保存在祕£jq:"$2=yhc|$roonch cntdebuuyuildlov. hs” lxhhroorcli«u 6彳砸謨7 了不窖告=全部重新生成:1巳成功,0巳失徵0已班過=342服務(wù)器端1類視圖chntroosserver licrosoft vixul studioi. i>| x文件電)12)觀e)電)項目0)生成辺)調(diào)試©)工具a)和試 旨口迥 社區(qū)© 幫助01) win32|顯示以下輸岀類視國 q x橫素 a jjh 申 chatkoobscrtcr田垂映射垂宏和竄址v全尚3數(shù)和斑田逖 c

22、aboutdlg1)七 cchatro ons«rvorxppdh 宅 cchatro onstrvtrdl gj ccli«ntsock<t七 cclientsocketlixt創(chuàng)七 clixitnsockti鋅以下輸出: |生成j養(yǎng)囹f5正在祓接1>正在嵌入»*.i >52 日吉保存在"filo o: %yhchatroonsorvo八dobug'btnldlog hs" ixhatroofiserver " 0 個借決,1 個=zxzxz=全部重斯生成1巳成功,o巳失腹0己跳過二二二二"二2資

23、源管理器視圖文件q) 礙堪)視陽&)項目q)生成q)調(diào)試)工具q)渕試$)囪口 社區(qū)© 幫助qp 拐jd"毗二玉電嚴(yán)草溟三仝匚l山斗決方宴551®笞理器 ' chatrocwsarvarll 1lc vi v vib uy meader filesm cbzrossetvw. h m chatrorserverdlg. h im cl> entsocket. h m cl 1 entsocke tli sth im listensocket. h h resource, h iz stdafx. he 匸 resource files lii

24、f chatrocflserver. icochatrowserver. rc2l 丄 source files 巧 chatrowserver. epp £ chatrowserver. rc 3 chatrowserverdlg. epp 吋 cl> entsocket. epp 色 clientsocketlist cpp色 listerocket. epp 色 stdafx. epp|h rm處 txt輸岀顯示以下輜出$)生成 win32chat&oobserver. h-xj cchatrowrserverapp1v7oti£nde£ _a

25、fxvim_h_.terror include ' std&fx. h* b«f«r« including this fil« fr pch tendiftxncludt rtxourc*./ nftin xynbolx/ cchatroarserverapp/ s” chfttroonservr. cpp for th« implonenteon of this class/匚chatro ocs erxt廟闕public:cckatroooservrapp 0:b/ overrides/xard g«n«

26、rat«d virtual function ovwrridasu (afx.virtval(cchatroc«serverapp) public:virtual bool ini tins twee ();/)afx_virtval/ iplennttion/ (afx_n6g(cch4trooi»s«rverapp)/ m 'tv -i'* .-av-4 、1"正在滋入酒單n日志保存在 ixhatroorserver 0 "hty? 個=zx=全部重新生成l巳成功,0巳失嘎0已跳過=3屬性管理器視圖chatrooa

27、scrver - licrosoft visual studioed間區(qū)文件彌 fflett)項目©)生成q)調(diào)試q)工具d)測試 自口趙)社區(qū)© 幫助qp卩-> debu 可廿玄汰閩口亠"j a 矗心.)勺 eq3電鉛心宰辜匚2 -jjp 'q ju尿性暫理爲(wèi)-upgrade fron vc 6.0 q xchatkooas«rr«r. h x acchatroocns or ver appvh#<ndif / «sc yzr > 10003 4 p chfttroonscirvdr 曰 0 debug |

28、 win32爆 upgr.do froo vc 6 0 曰 optim z« for sp««d 曰 dynsic link to mfc id wultibyt« ch«ract«r support 曰 ei vin32:g uprad« fron vc 6. 0id opt ms z« for zp««did dynnic link to mfcidcharacter s普port_afxyaerror include * std&£x. h? before includi

29、ng this file for pch 4kndi finclude *resoxirce./ n«in symbols/ cchatrootrsorvarapp/ see chatr«>ooserver. cpp for the impleftentation of this class:class cchfttroonsarvarapp : public cffinapppubliccchatroc<bs er ver app ():u/ ovtrrxdtxu classwixard generated virtual function overrides

30、 / afx_virtual(cchatroc<isqrv«rapp) public: virtual bool imtlnztonc« 0:/jjafx.virtval/ iwplenentation/afxnsg (cchtroonserverxpp)/ mtytv - «ra cl“gj簫決方實(shí)資源臺理器i遜類視因 二眉性営理器a代述廠灼口加備用口龍刪曰輸出4 使用方法4.1啟動服務(wù)器先在服務(wù)器端啟動服務(wù)器,啟動窗口如下:4.2啟動客戶端再啟動兩個客戶端,ip地址都要輸入服務(wù)器端得ip地址。如下圖所示:4.3 ip設(shè)置事項每個客戶端必須登錄同一個服務(wù)器

31、端的固定的ip,這樣,通信的兩個客戶端才能正常 通信。同時也可以同時啟動多個客戶端,進(jìn)行群內(nèi)聊天。5 核心代碼5.1服務(wù)端代碼/ chatroomserver.cpp : defines the class behaviors for the application./#include "stdafx.h"#include "chatroomserver.h"#include "chatroomserverdig.h"#ifdef _debug#definenewdebug_new#undefthis_filestatic char

32、this_file = _file_;#enchflllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll cchatroomserverappbegin_message_map(cchatroomserverapp, cwinapp)/afx_msg_map(cchatroomserverapp)/ note the classwizard will add and remove mapping macros here./ do not edit what you see in these bl

33、ocks of generated code! /afx_msgon_command(id_help, cwinapp:onhelp)end_message_map()lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll/ cchatroomserverapp constructioncchatroomserverapp:cchatroomserverapp()/ todo: add construction code here,/ place all significant initiali

34、zation in initlnstance/the one and only cchatroomserverapp objectcchatroomserverapp theapp;lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll/ cchatroomserverapp initializationbool cchatroomserverapp: :lnitlnsta nce()if (!afxsocketlnit()afxmessagebox(idp_socketsnit_failed)

35、;return false;afxe nablec on trolc on tainer();/ standard initialization/ if you are not using these features and wish to reduce the size/ of your final executable, you should remove from the following/ the specific initialization routines you do not need.#ifdef_afxdllenable3dcontrols();/ call this

36、when using mfc in a shared dll#elseenable3dcontrolsstatic(); / call this when linking to mfc statically#enchfcchatroomserverdig dig;m_pmainwnd = &dlg;int nresponse = dlg.domodal();訐 5 response = idok)/ todo: place code here to handle when the dialog is/ dismissed with okelse 訐(nresponse = idcanc

37、el)/ todo: place code here to handle when the dialog is / dismissed with can cel/ since the dialog has been closed, return false so that we exit the / application, rather than start the application's message pump return false;5.1客戶端代碼/ chatroomclient.cpp : defines the class behaviors for the app

38、lication./#include "stdafx.h"#include "chatroomclient.h"#include "chatroomclientdig.h"#include "connecteddig.h"#include "clientsocket.hh#ifdef_debug#define new debug_new#undefthis_filestatic char this_file = _file_;#enchfcclientsocket cursocket; lllllllll

39、llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll ii cchatroomclientappbegin_message_map(cchatroomclientapp/ cwinapp) /afx_msg_map(cchatroomclientapp)/ note - the classwizard will add and remove mapping macros here. / do not edit what you see in these blocks of generated code! /afx_msg on_command(id_help, cwinapp:onhelp)end_message_map()/ cchatroomclientapp constructioncchatroomclientapp:cchatroomclientapp()/ todo: add construction code here,/ place all sign訐icant initialization in initlnstaneellllllllllllllllllllllllllllllll

溫馨提示

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

評論

0/150

提交評論