【正文】
enterprise, therefore in order to facilitate internal work between user39。 the fourth part is the system structure and the module design。 Unicast。因此出現(xiàn)了 、 UC 等聊天工具,然而 、 UC 等聊天工具雖然方便、實(shí)用,但是,娛樂(lè)功能太多,有很多吸引人的娛樂(lè)功能,從一定程度上來(lái)說(shuō),是一種娛樂(lè)工具,不能作為用于即時(shí)通訊、文件共享的專用工具。并且避免了服務(wù)器忙或與服務(wù)器無(wú)法連接時(shí),浪費(fèi)過(guò)多時(shí)間用于和服務(wù)器建立連接。盡管第一代、第二代以及第三代即時(shí)通訊軟件的信息傳遞主要在互聯(lián)網(wǎng)范圍內(nèi),但各個(gè)階段都可以看到即時(shí)通訊行業(yè)在跨網(wǎng)通訊領(lǐng)域中的應(yīng)用,在移動(dòng)即時(shí)信息進(jìn)一步深化應(yīng)用,跨網(wǎng)語(yǔ)音交流進(jìn)一步加強(qiáng),跨網(wǎng)通訊領(lǐng)域的進(jìn)一步拓寬,都意味著真正意義的跨網(wǎng)即時(shí)通訊已發(fā)展成型。即時(shí)通信行業(yè) 出現(xiàn)了 連續(xù)多年高速 的 增長(zhǎng)。 2 理論基礎(chǔ) C/S軟件架構(gòu)技術(shù) C/S( Client/Server)結(jié)構(gòu),即大家熟知的客戶機(jī)和服務(wù)器結(jié)構(gòu)。 傳統(tǒng)的 C/S 體系結(jié)構(gòu)雖然采用的是開(kāi)放模式,但這只是系統(tǒng)開(kāi)發(fā)一級(jí)的開(kāi)放性,在特定的應(yīng)用中無(wú)論是 Client 端還是 Server 端都還需要特定的軟件支持。 UDP 協(xié)議適用端口分辨運(yùn)行在同一臺(tái)設(shè)備上的多個(gè)應(yīng)用程序。與 TCP 不同, UDP 并不提供對(duì) IP 協(xié)議的可靠機(jī)制、流控制以及錯(cuò)誤恢復(fù)功能等。單播流量地址唯一。 單播傳輸是 LANs 傳輸中的主要使用方式。 而 IPv6 支持單播( Unicast)、組播( Multicast)和任意播( Anycast)三種類型。廣播傳輸通常在局域網(wǎng)(如以太網(wǎng))中進(jìn)行,但有時(shí)也發(fā)生在虛擬局域網(wǎng)( VLAN)中。有些路由選擇協(xié)議,如 RIP,主要用于支持網(wǎng)絡(luò)設(shè)備 “Advertise” 網(wǎng)絡(luò)服務(wù)。其它節(jié)點(diǎn)收聽(tīng)廣播,只接收尋址到它們的幀。例如, MAC 地址,格式為 1xFFFFFFFF 是一種廣播地址; IP 地址 是通用廣播地址。為防止廣播風(fēng)暴的發(fā)生,需要細(xì)心配置網(wǎng)絡(luò)以阻止非法廣播信息的進(jìn)入。這些即時(shí)通訊業(yè)務(wù)屬于基礎(chǔ)語(yǔ)音業(yè)務(wù)外的數(shù)據(jù)增值類業(yè)務(wù),從范疇來(lái)講屬于“消息類”業(yè)務(wù),本質(zhì)是完成對(duì)“文字、聲音、圖像”信息的傳遞。并且現(xiàn)在用于實(shí)現(xiàn)單一的即時(shí)通訊、文件共享的軟件真的實(shí)在太少,因此不能為那些大中型企業(yè)所使用,而且在現(xiàn)行的系統(tǒng)中主要的問(wèn)題是:一、在即時(shí)通訊系統(tǒng)中由于防火墻、網(wǎng)絡(luò)速度等原因難以建立或者速度很慢, IM服務(wù)器還提供消息中轉(zhuǎn)服務(wù),即時(shí)消息全部先發(fā)送到 IM服務(wù)器,還要再由服務(wù)器轉(zhuǎn)發(fā)給對(duì)方,所以連接時(shí)過(guò)多的浪費(fèi)了網(wǎng)絡(luò)資源,并且在服務(wù)器忙或與服務(wù)器無(wú)法連接時(shí),浪費(fèi) 過(guò)多時(shí)間用于和服務(wù)器建立連接;二、即時(shí)通訊工具始終是通過(guò)互連網(wǎng)的服務(wù)器來(lái)傳輸?shù)模沁@樣所以更有可能會(huì)帶來(lái)遭遇到網(wǎng)絡(luò)上的許多攻擊,如木馬,蠕蟲(chóng)等。這種系統(tǒng)主要是為了方便了大中型企業(yè)在內(nèi)部即時(shí)通訊要求,從而進(jìn)一步提高 工作效率,增加企業(yè)的效益 。其中廣 播按鈕是將信息窗體中的內(nèi)容發(fā)送到所有的用戶;發(fā)送按鈕是將信息窗體中的內(nèi)容發(fā)送到指定的用戶;在線用戶顯示框中選取指定的用戶和查看用戶的信息;刷新是重載用戶列表。 圖 8 歷史記錄 系統(tǒng)功能模塊設(shè)計(jì) 網(wǎng)絡(luò)組件 UDP 協(xié)議由 TCP 協(xié)議衍生而來(lái)。把一個(gè)工程作為客戶,另一個(gè)作 為服務(wù)器。要使用 Inter Direct 實(shí)現(xiàn)的組件,只需使用Send 向給定的 IP 地址和端口號(hào)廣播一個(gè)命令字符串。 下面是我對(duì) TIdUDPClient 和 TIdUDPServer 組件的設(shè)置圖: 圖 9 TIdUDPClient組件設(shè)置 圖 10 TIdUDPServer組件設(shè)置 用戶信息顯示功能 為了方便用戶選取單個(gè)用戶進(jìn)行信息發(fā)送和查看在線用戶的信息,所以設(shè)計(jì)了一個(gè) ListView 來(lái)進(jìn)行顯示如圖 5,在 ListView 中包括了用戶名、工作組、 IP地址。List : TStringList) : Boolean。 Count,BufSize,Res: DWord。 TmpStr:String。 //指定工作組名稱 := RESOURCEDISPLAYTYPE_SERVER。 If Res NO_ERROR then Exit。 //申請(qǐng)內(nèi)存,用于獲 取工作組信息 //獲取計(jì)算機(jī)名稱 Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize)。 For Ind := 0 to Count 1 do //列舉工作組的計(jì)算機(jī)名稱 Begin //獲取工作組的計(jì)算機(jī)名稱 tmpStr:=。 Inc(Temp)。//關(guān)閉一次列舉 If Res NO_ERROR then exit。 第 12 頁(yè) 共 25 頁(yè) 2) 工作組獲取代碼如下: var //顯示所有工作組的名稱 NetResource : TNetResource。 p : TNetResourceArray。//網(wǎng)絡(luò)類型信息 //獲取某個(gè)網(wǎng)絡(luò)類型的文件資源的句柄, NetResource為網(wǎng)絡(luò)類型信息, lphEnum為返回名柄 Res:=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER, NetResource,lphEnum)。 //緩沖區(qū)大小設(shè)置為 8K GetMem(Buf, BufSize)。 for I := 0 to Count 1 do //列舉各個(gè)工作組的信息 begin ( StrPAS( P^.lpRemoteName ))。 Res := WNetCloseEnum(lphEnum)。 FreeMem(Buf)。 AData: TStream。 recvport:integer。 msg:=Trim(String(Pchar(Readbuf[0])))。LOGIN39。login recv39。 adduser(recvname,recvworkgroup,recvip,recvport)。REVLOG39。 RECVPORT:=strtoint(copy(msg,headlen+1,portlen))。 第 14 頁(yè) 共 25 頁(yè) 局域網(wǎng)內(nèi)實(shí)現(xiàn)單播功能 在本 設(shè)計(jì)中單播發(fā)送的按鈕為 BitBtn2,主要是通過(guò) IdUDPServer 和IdUDPClient 組件來(lái)編寫的,由 語(yǔ)句來(lái)發(fā)送的,主要是對(duì)局域網(wǎng)內(nèi)部的同一工作組用戶發(fā)送信息。 chatinfo,_ToIP,savelog:string。 //處理握手信息 添加對(duì)方 ip 返回對(duì)方 ip if head=39。)。 recvport:=9000。HAND39。 RECVNAME:=COPY(msg,headlen+1,namelen)。 recvp2pdata(recvip,recvname,recvworkgroup,recvport)。 var minfobuf:array[0..1023]of char。 begin j:=0。 if then (recvworkgroup)。,39。 end。%6s%255s%1024s39。 strpcopy(chatinfobuf,chatinfo)。 第 16 頁(yè) 共 25 頁(yè) if then (RECVNAME)。 minfo:=format(39。,recvport,recvip])。 end。 begin tempItem:= 。 if then (revip)。recvport:integer)。 if j= then 第 17 頁(yè) 共 25 頁(yè) IP 地址進(jìn)行顯示;由工作組進(jìn)行顯示,最后連接到表 Label2 中去。 chatinfobuf:array[0..2030]of char。,[39。 (chatinfobuf,9000)。 if then (myworkgroup)。 end。 begin if then begin :=。 var F:textfile。 closefile(F)。 then begin Assignfile(f,)。)。 if then writeln(f,39。+datetostr(now)+timetostr(now))。 writeln(f,)。 closefile(f)。本設(shè)計(jì)是在是Microsoft Windows XP 系統(tǒng)上利用編程軟件開(kāi)發(fā)的,然后再組建的局域網(wǎng)中來(lái)進(jìn)行測(cè)試和調(diào)試工作,所以最少會(huì)用到兩臺(tái)或兩臺(tái)以上的電腦并由交換 機(jī)組成一個(gè)小型的局域網(wǎng),考慮到一些系統(tǒng)兼容性的問(wèn)題,所以在內(nèi)部網(wǎng)絡(luò)上的每臺(tái)計(jì)算機(jī)上都用的是相同的操作系統(tǒng),在網(wǎng)絡(luò)配置方面也是相同的方式。 設(shè)計(jì)測(cè)試的是同在一個(gè)局域網(wǎng)中,先將編譯好的程序復(fù)制到內(nèi)部網(wǎng)絡(luò)上的沒(méi)臺(tái)計(jì)算機(jī)上面,然后都將設(shè)計(jì)的系統(tǒng)打開(kāi)運(yùn)行,這是觀察是否能顯示所有的在線用戶的信息,如果了防火墻之類的軟件正在運(yùn)行的話,很可能不能正常顯示工作組、 IP 等信息,所以最好是關(guān)閉防火墻。解決了傳統(tǒng)通訊工具需要連接遠(yuǎn)程服務(wù)器來(lái)進(jìn)行信息轉(zhuǎn)發(fā)的局限性問(wèn)題 ,這樣能夠節(jié)約網(wǎng)絡(luò)資源 ,也保證了在信息交流時(shí)的安全性,減少了病毒及木馬的感染率。從設(shè)計(jì)分析到設(shè)計(jì)編寫直到具體實(shí)現(xiàn),在學(xué)校所學(xué)的理論知識(shí)對(duì)我有很大的幫助,我也發(fā)現(xiàn)了我的很多不足的地方。 [3] 施新剛 .Delphi 實(shí)效編程百例 [M].北京:人民郵電出版社 ,。 [7] (美 )Paul 6 應(yīng)用開(kāi)發(fā)指南 [M].北京:清華大學(xué)出版社 ,。除非另有說(shuō)明,本文的工作是原始性工作。 ( 4)學(xué)??稍试S學(xué)位論文被查閱或