A. 請問誰知道常見的電腦病毒名稱嗎還有每個病毒的危害在哪裡
系統病毒
系統病毒的前綴為:Win32、PE、Win95、W32、W95等。這些病毒的一般共有的特性是可以感染windows操作系統的 *.exe 和 *.dll 文件,並通過這些文件進行傳播。如CIH病毒。
蠕蟲病毒
蠕蟲病毒的前綴是:Worm。這種病毒的共有特性是通過網路或者系統漏洞進行傳播,很大部分的蠕蟲病毒都有向外發送帶毒郵件,阻塞網路的特性。比如沖擊波(阻塞網路),小郵差(發帶毒郵件) 等。
木馬病毒、黑客病毒
木馬病毒其前綴是:Trojan,黑客病毒前綴名一般為 Hack 。木馬病毒的共有特性是通過網路或者系統漏洞進入用戶的系統並隱藏,然後向外界泄露用戶的信息,而黑客病毒則有一個可視的界面,能對用戶的電腦進行遠程式控制制。木馬、黑客病毒往往是成對出現的,即木馬病毒負責侵入用戶的電腦,而黑客病毒則會通過該木馬病毒來進行控制。現在這兩種類型都越來越趨向於整合了。一般的木馬如QQ消息尾巴木馬 Trojan.QQ3344 ,還有大家可能遇見比較多的針對網路游戲的木馬病毒如 Trojan.LMir.PSW.60 。這里補充一點,病毒名中有PSW或者什麼PWD之類的一般都表示這個病毒有盜取密碼的功能(這些字母一般都為「密碼」的英文「password」的縮寫)一些黑客程序如:網路梟雄(Hack.Nether.Client)等。
腳本病毒
腳本病毒的前綴是:Script。腳本病毒的共有特性是使用腳本語言編寫,通過網頁進行的傳播的病毒,如紅色代碼(Script.Redlof)。腳本病毒還會有如下前綴:VBS、JS(表明是何種腳本編寫的),如歡樂時光(VBS.Happytime)、十四日(Js.Fortnight.c.s)等。
宏病毒
其實宏病毒是也是腳本病毒的一種,由於它的特殊性,因此在這里單獨算成一類。宏病毒的前綴是:Macro,第二前綴是:Word、Word97、Excel、Excel97(也許還有別的)其中之一。凡是只感染WORD97及以前版本WORD文檔的病毒採用Word97作為第二前綴,格式是:Macro.Word97;凡是只感染WORD97以後版本WORD文檔的病毒採用Word做為第二前綴,格式是:Macro.Word;凡是只感染EXCEL97及以前版本EXCEL文檔的病毒採用Excel97做為第二前綴,格式是:Macro.Excel97;凡是只感染EXCEL97以後版本EXCEL文檔的病毒採用Excel做為第二前綴,格式是:Macro.Excel,以此類推。該類病毒的共有特性是能感染OFFICE系列文檔,然後通過OFFICE通用模板進行傳播,如:著名的美麗莎(Macro.Melissa)。
後門病毒
後門病毒的前綴是:Backdoor。該類病毒的共有特性是通過網路傳播,給系統開後門,給用戶電腦帶來安全隱患。
病毒種植程序病毒
這類病毒的共有特性是運行時會從體內釋放出一個或幾個新的病毒到系統目錄下,由釋放出來的新病毒產生破壞。如:冰河播種者(Dropper.BingHe2.2C)、MSN射手(Dropper.Worm.Smibag)等。
破壞性程序病毒
破壞性程序病毒的前綴是:Harm。這類病毒的共有特性是本身具有好看的圖標來誘惑用戶點擊,當用戶點擊這類病毒時,病毒便會直接對用戶計算機產生破壞。如:格式化C盤(Harm.formatC.f)、殺手命令(Harm.Command.Killer)等。
玩笑病毒
玩笑病毒的前綴是:Joke。也稱惡作劇病毒。這類病毒的共有特性是本身具有好看的圖標來誘惑用戶點擊,當用戶點擊這類病毒時,病毒會做出各種破壞操作來嚇唬用戶,其實病毒並沒有對用戶電腦進行任何破壞。如:女鬼(Joke.Girl ghost)病毒。
捆綁機病毒
捆綁機病毒的前綴是:Binder。這類病毒的共有特性是病毒作者會使用特定的捆綁程序將病毒與一些應用程序如QQ、IE捆綁起來,表面上看是一個正常的文件,當用戶運行這些捆綁病毒時,會表面上運行這些應用程序,然後隱藏運行捆綁在一起的病毒,從而給用戶造成危害。如:捆綁QQ(Binder.QQPass.QQBin)、系統殺手(Binder.killsys)等。 以上為比較常見的病毒前綴,有時候我們還會看到一些其他的,但比較少見,這里簡單提一下: DoS:會針對某台主機或者伺服器進行DoS攻擊; Exploit:會自動通過溢出對方或者自己的系統漏洞來傳播自身,或者他本身就是一個用於Hacking的溢出工具; HackTool:黑客工具,也許本身並不破壞你的機子,但是會被別人加以利用來用你做替身去破壞別人。 你可以在查出某個病毒以後通過以上所說的方法來初步判斷所中病毒的基本情況,達到知己知彼的效果。在殺毒無法自動查殺,打算採用手工方式的時候這些信息會給你很大的幫助
一 木馬的種類:
1破壞型:惟一的功能就是破壞並且刪除文件,可以自動的刪除電腦上的DLL、INI、EXE文件
2、密碼發送型:可以找到隱藏密碼並把它們發送到指定的信箱。有人喜歡把自己的各種密碼以文件的形式存放在計算機中,認為這樣方便;還有人喜歡用WINDOWS提供的密碼記憶功能,這樣就可以不必每次都輸入密碼了。許多黑客軟體可以尋找到這些文件,把它們送到黑客手中。也有些黑客軟體長期潛伏,記錄操作者的鍵盤操作,從中尋找有用的密碼。
3、遠程訪問型:最廣泛的是特洛伊馬,只需有人運行了服務端程序,如果客戶知道了服務端的IP地址,就可以實現遠程式控制制。以下的程序可以實現觀察"受害者"正在干什麼,當然這個程序完全可以用在正道上的,比如監視學生機的操作。
4.鍵盤記錄木馬
這種特洛伊木馬是非常簡單的。它們只做一件事情,就是記錄受害者的鍵盤敲擊並且在LOG文件里查找密碼。
5.DoS攻擊木馬:隨著DoS攻擊越來越廣泛的應用,被用作DoS攻擊的木馬也越來越流行起來。當你入侵了一台機器,給他種上DoS攻擊木馬,那麼日後這台計算機就成為你DoS攻擊的最得力助手了。你控制的肉雞數量越多,你發動DoS攻擊取得成功的機率就越大。所以,這種木馬的危害不是體現在被感染計算機上,而是體現在攻擊者可以利用它來攻擊一台又一台計算機,給網路造成很大的傷害和帶來損失。
6.代理木馬:黑客在入侵的同時掩蓋自己的足跡,謹防別人發現自己的身份是非常重要的,因此,給被控制的肉雞種上代理木馬,讓其變成攻擊者發動攻擊的跳板就是代理木馬最重要的任務。通過代理木馬,攻擊者可以在匿名的情況下使用Telnet,ICQ,IRC等程序,從而隱蔽自己的蹤跡
7.FTP木馬:這種木馬可能是最簡單和古老的木馬了,它的惟一功能就是打開21埠,等待用戶連接。現在新FTP木馬還加上了密碼功能,這樣,只有攻擊者本人才知道正確的密碼,從而進人對方計算機。
8.程序殺手木馬:上面的木馬功能雖然形形色色,不過到了對方機器上要發揮自己的作用,還要過防木馬軟體這一關才行。常見的防木馬軟體有ZoneAlarm,Norton Anti-Virus等。程序殺手木馬的功能就是關閉對方機器上運行的這類程序,讓其他的木馬更好地發揮作用
9.反彈埠型木馬:木馬是木馬開發者在分析了防火牆的特性後發現:防火牆對於連入的鏈接往往會進行非常嚴格的過濾,但是對於連出的鏈接卻疏於防範。於是,與一般的木馬相反,反彈埠型木馬的服務端 (被控制端)使用主動埠,客戶端 (控制端)使用被動埠。木馬定時監測控制端的存在,發現控制端上線立即彈出埠主動連結控制端打開的主動埠;為了隱蔽起見,控制端的被動埠一般開在80,即使用戶使用掃描軟體檢查自己的埠,發現類似TCP UserIP:1026 ControllerIP:80ESTABLISHED的情況,稍微疏忽一點,你就會以為是自己在瀏覽網頁。
二:病毒類
1開機磁區病毒
2檔案型病毒
3巨集病毒
4其他新種類的病毒
三:1計算機病毒名稱
沖擊波(WORM_MSBlast.A)
W97M_Etkill(宏病毒)
搗毀者(W97M_ TRASHER.D)
.......等等...........
2木馬病毒
木馬病毒的前綴是:Trojan
如Q尾巴:Trojan.QQPSW
網路游戲木馬:Trojan.StartPage.FH等
3腳本病毒
腳本病毒的前綴是:Script
如:紅色代碼Script.Redlof
4系統病毒
系統病毒的前綴為:Win32、PE、Win95、W32、W95等
如以前有名的CIH病毒就屬於系統病毒
5宏病毒
宏病毒的前綴是:Macro,第二前綴有Word、Word97、Excel、Excel97等
如以前著名的美麗莎病毒Macro.Melissa。
6蠕蟲病毒
蠕蟲病毒的前綴是:Worm
大家比較熟悉的這類病毒有沖擊波、震盪波等
7捆綁機病毒
捆綁機病毒的前綴是:Binder
如系統殺手Binder.killsys
8後門病毒
後門病毒的前綴是:Backdoor
如愛情後門病毒Worm.Lovgate.a/b/c
9壞性程序病毒
破壞性程序病毒的前綴是:Harm
格式化C盤(Harm.formatC.f)、殺手命令(Harm.Command.Killer)等。
10玩笑病毒
玩笑病毒的前綴是:Joke
如:女鬼(Joke.Girlghost)病毒。
常見木馬名稱:
Mbbmanager.exe → 聰明基因
_.exe → Tryit Mdm.exe → Doly 1.6-1.7
Aboutagirl.exe → 初戀情人 Microsoft.exe → 傳奇密碼使者
Absr.exe → Backdoor.Autoupder Mmc.exe → 尼姆達病毒
Aplica32.exe → 將死者病毒 Mprdll.exe → Bla
Avconsol.exe → 將死者病毒 Msabel32.exe → Cain and Abel
Avp.exe → 將死者病毒 Msblast.exe → 沖擊波病毒
Avp32.exe → 將死者病毒 Mschv.exe → Control
Avpcc.exe → 將死者病毒 Msgsrv36.exe → Coma
Avpm.exe → 將死者病毒 Msgsvc.exe → 火鳳凰
Avserve.exe → 震盪波病毒 Msgsvr16.exe → Acid Shiver
Bbeagle.exe → 惡鷹蠕蟲病毒 Msie5.exe → Canasson
Brainspy.exe → BrainSpy vBeta Msstart.exe → Backdoor.livup
Cfiadmin.exe → 將死者病毒 Mstesk.exe → Doly 1.1-1.5
Cfiaudit.exe → 將死者病毒 Netip.exe → Spirit 2000 Beta
Cfinet32.exe → 將死者病毒 Netspy.exe → 網路精靈
Checkdll.exe → 網路公牛 Notpa.exe → Backdoor
Cmctl32.exe → Back Construction Odbc.exe → Telecommando
Command.exe → AOL Trojan Pcfwallicon.exe → 將死者病毒
Diagcfg.exe → 廣外女生 Pcx.exe → Xplorer
Dkbdll.exe → Der Spaeher Pw32.exe → 將死者病毒
Dllclient.exe → Bobo Recycle - Bin.exe → s**tHeap
Dvldr32.exe → 口令病毒 Regscan.exe → 波特後門變種
Esafe.exe → 將死者病毒 Tftp.exe → 尼姆達病毒
Expiorer.exe → Acid Battery Thing.exe → Thing
Feweb.exe → 將死者病毒 User.exe → Schwindler
Flcss.exe → Funlove病毒 Vp32.exe → 將死者病毒
Frw.exe → 將死者病毒 Vpcc.exe → 將死者病毒
Icload95.exe → 將死者病毒 Vpm.exe → 將死者病毒
Icloadnt.exe → 將死者病毒 Vsecomr.exe → 將死者病毒
Icmon.exe → 將死者病毒 Server.exe → Revenger, WinCrash, YAT
Icsupp95.exe → 將死者病毒 Service.exe → Trinoo
Iexplore.exe → 惡郵差病毒 Setup.exe → 密碼病毒或Xana
Rpcsrv.exe → 惡郵差病毒 Sockets.exe → Vampire
Rundll.exe → SCKISS愛情森林 Something.exe → BladeRunner
Rundll32.exe→ 狩獵者病毒 Spfw.exe → 瑞波變種PX
Runouce.exe → 中國黑客病毒 Svchost.exe (線程105) → 藍色代碼
Scanrew.exe → 傳奇終結者 Sysedit32.exe → SCKISS愛情森林
Scvhost.exe → 安哥病毒 Sy***plor.exe → wCrat
Server 1. 2.exe → Spirit 2000 1.2fixed Sy***plr.exe → 冰河
Intel.exe → 傳奇叛逆 Syshelp.exe → 惡郵差病毒
Internet.exe → 傳奇幽靈 Sysprot.exe → Satans Back Door
Internet.exe → 網路神偷 Sysrunt.exe → Ripper
Kernel16.exe → Transmission Scount System.exe → s**tHeap
Kernel32.exe → 壞透了或冰河 System32.exe → DeepThroat 1.0
Kiss.exe → 傳奇天使 Systray.exe → DeepThroat 2.0-3.1
Krn132.exe → 求職信病毒 Syswindow.exe → Trojan Cow
Libupdate.exe → BioNet Task_Bar.exe
近期高危病毒/木馬:
病毒名稱:熊貓燒香
病毒名稱:U盤破壞者
最新病毒報告:
病毒名稱:Win32.Mitglieder.DU
病毒別名:Email-Worm.Win32.Bagle.gi
發現日期:2007/2/11
病毒種類:特洛伊木馬
病毒危害等級:★★★★★
病毒原理及基本特徵:
Win32.Mitglieder.DU是一種特洛伊病毒,能夠在被感染機器上打開一個後門,並作為一個SOCKS 4/5代理。特洛伊還會定期的連接與感染相關的信息的網站。病毒的主要運行程序大小為48,728位元組。
感染方式:
病毒的主體程序運行時,會復制到:
%System%\wintems.exe
Mitglieder.DU生成以下注冊表,以確保每次系統啟動時運行病毒:
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\german.exe = "%System%\wintems.exe"
註:'%System%'是一個可變的路徑。病毒通過查詢操作系統來決定System文件夾的位置。Windows 2000 and NT默認的系統安裝路徑是C:\Winnt\System32; 95,98 和 ME 的是C:\Windows\System; XP 的是C:\Windows\System32。
危害:
SOCKS Proxy
Mitglieder.DU在25552埠打開一個SOCKS 4/5代理。
病毒名稱:「勒索者(Harm.Extortioner.a)」
病毒危害等級:★★★☆
依賴系統:WIN9X/NT/2000/XP。
病毒種類:惡意程序
病毒原理及基本特徵:
該惡意程序採用E語言編寫,運行後會將用戶硬碟上除系統盤的各個分區的文件刪除,將自身復制到根目錄下,試圖通過優盤、移動硬碟等移動存儲設備傳播,並會建立一個名為「警告」的文件。同時該病毒還會彈出內容為:「警告:發現您硬碟內曾使用過盜版了的我公司軟體,所以將您部份文件移到鎖定了的扇區,若要解鎖將文件釋放,請電郵liugongs196****[email protected]購買相應的軟體」的窗口,向用戶進行勒索.
病毒名稱:「情人節」(Vbs_Valentin.A)
病毒種類:腳本類病毒
發作日期:2月14日
危害程度:病毒主要通過電子郵件和mIRC(Internet 在線聊天系統)進行傳播, 並在2月14日「情人節」這一天,將受感染的計算機系統中C盤下的文件進行重命名,在其原文件名後增加後綴名「.txt」,並用一串西班牙字元覆蓋這些文件的內容,造成計算機系統無法正常使用
計算機病毒疫情監測周報
1
「威金」( Worm_Viking )
它主要通過網路共享進行傳播,會感染計算機系統中所有文件後綴名為.EXE的可執行文件,導致可執行文件無法正常啟動運行,這當中也包括計算機系統中防病毒軟體,蠕蟲變種會終止防病毒軟體,進而導致其無法正常工作。其傳播速度十分迅速,一旦進入區域網絡,很快就會導致整個區域網絡癱瘓。它還會在受感染的計算機系統里運行後,會修改系統注冊表的自啟動項,以使蠕蟲隨計算機系統啟動而自動運行。
2 「網路天空」變種(Worm_Netsky.D)
該病毒通過郵件傳播,使用UPX壓縮。運行後,在%Win dows%目錄下生成自身的拷貝,名稱為Winlogon.exe。 (其中,%Windows% 是Windows的默認文件夾,通常是 C:\Windows 或 C:\WINNT),病毒使用Word的圖標,並在共享文件夾中生成自身拷貝。病毒創建注冊表項,使得自身能夠在系統啟動時自動運行。病毒郵件的發信人、主題、內容和附件都是不固定的。
3 「高波」(Worm_AgoBot)
該病毒是常駐內存的蠕蟲病毒,利用RPC DCOM 緩沖區溢出漏洞、IIS5/WEBDAV 緩沖區溢出漏洞和RPC Locator 漏洞進行傳播,還可通過弱密碼攻擊遠程系統進行主動傳播以及利用mIRC軟體進行遠程式控制制和傳播。病毒運行後,在%System%文件夾下生成自身的拷貝nvchip4.exe。添加註冊表項,使得自身能夠在系統啟動時自動運行。
4 Worm_Mytob.X
該病毒是Worm_Mytob變種,並利用自身的SMTP引擎按照郵件地址列表中的郵件地址向外發送病毒郵件。該病毒還可以通過網路的共享文件夾進行搜索並嘗試在這些文件夾中產生自身的拷貝文件。還具有後門功能,會使用不同的埠連接到指定的伺服器上面,該伺服器監聽來自遠程惡意用戶的指令,利用這個指令遠程用戶可以控制受感染機器。同時,該變種利用一個任意的埠建立一個 FTP伺服器,遠程用戶可以下載或上傳文件或是惡意程序
1.Elk Cloner(1982年) 它被看作攻擊個人計算機的第一款全球病毒,也是所有令人頭痛的安全問題先驅者。它通過蘋果Apple II軟盤進行傳播。這個病毒被放在一個游戲磁碟上,可以被使用49次。在第50次使用的時候,它並不運行游戲,取而代之的是打開一個空白屏幕,並顯示一首短詩。 2.Brain(1986年) Brain是第一款攻擊運行微軟的受歡迎的操作系統DOS的病毒,可以感染360K軟盤的病毒,該病毒會填充滿軟盤上未用的空間,而導致它不能再被使用。 3.Morris(1988年) Morris該病毒程序利用了系統存在的弱點進行入侵,Morris設計的最初的目的並不是搞破壞,而是用來測量網路的大小。但是,由於程序的循環沒有處理好,計算機會不停地執行、復制Morris,最終導致死機。 4.CIH(1998年) CIH病毒是迄今為止破壞性最嚴重的病毒,也是世界上首例破壞硬體的病毒。它發作時不僅破壞硬碟的引導區和分區表,而且破壞計算機系統BIOS,導致主板損壞。 此病毒是由台灣大學生陳盈豪研製的,據說他研製此病毒的目的是紀念1986年的災難或是讓反病毒軟體難堪。 5.Melissa(1999年) Melissa是最早通過電子郵件傳播的病毒之一,當用戶打開一封電子郵件的附件,病毒會自動發送到用戶通訊簿中的前50個地址,因此這個病毒在數小時之內傳遍全球。 6.Love bug(2000年) Love bug也通過電子郵件附近傳播,它利用了人類的本性,把自己偽裝成一封求愛信來欺騙收件人打開。這個病毒以其傳播速度和范圍讓安全專家吃驚。在數小時之內,這個小小的計算機程序征服了全世界范圍之內的計算機系統。 7.「紅色代碼」(2001年) 被認為是史上最昂貴的計算機病毒之一,這個自我復制的惡意代碼「紅色代碼」利用了微軟IIS伺服器中的一個漏洞。該蠕蟲病毒具有一個更惡毒的版本,被稱作紅色代碼II。這兩個病毒都除了可以對網站進行修改外,被感染的系統性能還會嚴重下降。 8.「Nimda」(2001年) 尼姆達(Nimda)是歷史上傳播速度最快的病毒之一,在上線之後的22分鍾之後就成為傳播最廣的病毒。 9.「沖擊波」(2003年) 沖擊波病毒的英文名稱是Blaster,還被叫做Lovsan或Lovesan,它利用了微軟軟體中的一個缺陷,對系統埠進行瘋狂攻擊,可以導致系統崩潰。 10.「震盪波」(2004年) 震盪波是又一個利用Windows缺陷的蠕蟲病毒,震盪波可以導致計算機崩潰並不斷重啟。 11.「熊貓燒香」(2007年) 熊貓燒香會使所有程序圖標變成熊貓燒香,並使它們不能應用。 12.「掃盪波」(2008年) 同沖擊波和震盪波一樣,也是個利用漏洞從網路入侵的程序。而且正好在黑屏事件,大批用戶關閉自動更新以後,這更加劇了這個病毒的蔓延。這個病毒可以導致被攻擊者的機器被完全控制。 13.「Conficker」(2008年) Conficker.C病毒原來要在2009年3月進行大量傳播,然後在4月1日實施全球性攻擊,引起全球性災難。不過,這種病毒實際上沒有造成什麼破壞。 14.「木馬下載器」(2009年) 本年度的新病毒,中毒後會產生1000~2000不等的木馬病毒,導致系統崩潰,短短3天變成360安全衛士首殺榜前3名(現在位居榜首) 15.「鬼影病毒」(2010年) 該病毒成功運行後,在進程中、系統啟動載入項里找不到任何異常,同時即使格式化重裝系統,也無法將徹底清除該病毒。猶如「鬼影」一般「陰魂不散」,所以稱為「鬼影」病毒。 16 .「極虎病毒」(2010年) 該病毒類似qvod播放器的圖標。感染極虎之後可能會遭遇的情況:計算機進程中莫名其妙的有ping.exe 瑞星
和rar.exe進程,並且cpu佔用很高,風扇轉的很響很頻繁(手提電腦),並且這兩個進程無法結束。某些文件會出現usp10.dll、lpk.dll文件,殺毒軟體和安全類軟體會被自動關閉,如瑞星、360安全衛士等如果沒有及時升級到最新版本都有可能被停掉。破壞殺毒軟體,系統文件,感染系統文件,讓殺毒軟體無從下手。極虎病毒最大的危害是造成系統文件被篡改,無法使用殺毒軟體進行清理,一旦清理,系統將無法打開和正常運行,同時基於計算機和網路的帳戶信息可能會被盜,如網路游戲帳戶、銀行帳戶、支付帳戶以及重要的電子郵件帳戶等。
B. 如何在vc++使用socket進行圖象傳輸
用VB5中WinSock控制項編寫網上聊天程序
Sockets是在系統上提出來的,一開始主要是用於本地通訊,但很快就應用到C/S體繫上。MicroSoft公司在此基礎上創建了WinSock控制項,專門用於Windows介面,與Sockets完全兼容。Winsock控制項對用戶來說是不可見的,它提供了訪問 TCP 和 UDP 網路服務的方便途徑。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的開發人員都可使用它。為編寫客戶或伺服器應用程序,不必了解 TCP 的細節或調用低級的 Winsock APIs。通過設置控制項的屬性並調用其方法就可輕易連接到一台遠程機器上去,並且還可雙向交換數據。下面就利用VB5中的WinSock控制項編寫一個網上聊天程序。
一)網路通信協議的基礎和選擇
1.1 TCP(數據傳輸協議)基礎
數據傳輸協議允許創建和維護與遠程計算機的連接。連接兩台計算機就可彼此進行數據傳輸。
如果創建客戶應用程序,就必須知道伺服器計算機名或者 IP 地址(RemoteHost 屬性),還要知道進行「偵聽」的埠(RemotePort 屬性),然後調用 Connect 方法。
如果創建伺服器應用程序,就應設置一個收聽埠(LocalPort 屬性)並調用 Listen 方法。當客戶計算機需要連接時就會發生 ConnectionRequest 事件。為了完成連接,可調用 ConnectionRequest 事件內的 Accept 方法。
建立連接後,任何一方計算機都可以收發數據。為了發送數據,可調用 SendData 方法。當接收數據時會發生 DataArrival 事件。調用 DataArrival 事件內的 GetData 方法就可獲取數據。
1.2 UDP(用戶數據文報協議)基礎
用戶數據文報協議 (UDP) 是一個無連接協議。跟 TCP 的操作不同,計算機並不建立連接。另外 UDP 應用程序可以是客戶機,也可以是伺服器。
為了傳輸數據,首先要設置客戶計算機的 LocalPort 屬性。然後,伺服器計算機只需將 RemoteHost 設置為客戶計算機的 Internet 地址,並將 RemotePort 屬性設置為跟客戶計算機的 LocalPort 屬性相同的埠,並調用 SendData 方法來著手發送信息。於是,客戶計算機使用 DataArrival 事件內的 GetData 方法來獲取已發送的信息。
1.3 選擇通訊協議
在使用 WinSock 控制項時,首先需要考慮使用什麼協議。可以使用的協議包括 TCP 和 UDP。兩種協議之間的重要區別在於它們的連接狀態:
TCP 協議是有連接的協議,可以將它同電話系統相比。在開始數據傳輸之前,用戶必須先建立連接。
UDP 協議是一種無連接協議,兩台計算機之間的傳輸類似於傳遞郵件:消息從一台計算機發送到另一台計算機,但是兩者之間沒有明確的連接。另外,單次傳輸的最大數據量取決於具體的網路。
到底選擇哪一種協議通常是由需要創建的應用程序決定的。下面的幾個問題將有助於選擇適宜的協議:
1. 在收發數據的時候,應用程序是否需要得到客戶端或者伺服器的確認信息?如果需要,使用 TCP 協議,在收發數據之前先建立明確的連接。
2. 數據量是否特別大(例如圖象與聲音文件)?在連接建立之後,TCP 協議將維護連接並確保數據的完整性。不過,這種連接需要更多的計算資源,因而是比較「昂貴」的。
3. 數據發送是間歇的,還是在一個會話內?例如,如果應用程序在某個任務完成的時候需要通知某個計算機,UDP 協議是更適宜的。UDP 協議適合發送少量的數據。
通訊協議的選擇是通過設置WinSock的Protocol屬性來實現的。下面選擇TCP通訊協議編寫網上聊天程序,在此之前必須知道一個極其重要的參數---伺服器端的IP地址或計算機名。
二)確定計算機的名字
1. 在計算機的桌面上,右鍵單擊「網上鄰居」。
2. 選擇「屬性」。
3. 單擊「標識」選項卡。
4. 在「計算機名稱」框中可以找到計算機的名稱。
確定計算機的 IP地址
1. 單擊「任務條」上的「啟動」。
2. 選擇「運行」。
3. 若伺服器端操作系統為win95則在「打開」中填入「winipcfg」,若伺服器端操作系統為winnt則在「打開」中填入「ipconfig」。
4. 按下「確定」鍵。
上面找到的計算機名稱或IP地址可以作為WinSock的RemoteHost 屬性的值。
三) winsock控制項的State屬性。
state 屬性的設置值是: 常 數
值 描 述
sckclosed 0 預設的。關閉
sckopen 1 打開
scklistening 2 偵聽
sckconnectionpending 3 連接掛起
sckresolvinghost 4 識別主機
sckhostresolved 5 已識別主機
sckconnecting 6 正在連接
sckconnected 7 已連接
sckclosing 8 同級人員正在關閉連接
sckerror 9 錯誤
下面主要要用到sckClosed.sckConnected兩個State屬性的值。
四)網上聊天程序的編制
4.1 程序中伺服器端所起的作用。
從圖示中可以看到伺服器端的兩個winsock控制項之間並不存在直接的通訊,同時sckServer1和sckClient2及sckServer2和sckClient1之間是不能直接通訊的。這也即是說若sckClient1向sckClient2發出信息,信息首先被sckServer1接受,sckServer1再將信息傳給程序的信息處理部分,信息處理部分再將處理好的信息傳給sckServer2,再由sckServer2傳給sckClient2。反之亦然。那麼伺服器端的信息處理部分又進行什麼工作呢?
1. 對通訊的通道數作一些限制。
2. 對使用後已關閉的通道,必須能夠重新使用以節省資源。
3. 必須對所傳遞的數據包信息作甑別,從而作出不同的處理。
通過解開數據的包頭就可區分不同的信息。
網上聊天有兩種方式:第一種,以廣播方式;第二種,以點對點的方式。廣播方式即所有客戶都能收到某一客戶發出的信息。點對點的方式即想說「悄悄話」的一對客戶專門開辟了一間談話的「小屋」,別的客戶不能「聽」到他們的談話。在下面的程序中將看到如何利用數據的不同包頭來區分用戶是想以廣播方式還是以點對點的方式進行談話的(點對點方式數據的包頭為「PT」,廣播方式則無包頭)。
4.2 客戶端的程序
1. 在客戶端創建一個新的工程將其命名為「ClientPrj」
2. 將預設窗體命名為 frmClient。
3. 將窗體的標題改為「Client」。
4. 在窗體中添加一個 WinSock 控制項,並將其命名為 tcpClient。
5. 在 frmClient 中添加一個ListBox 控制項。將其命名為lstReceive。
6. 在 frmClient 中添加一個 TextBox 控制項。將其命名為 txtSend。
7. 在窗體上放兩個 CommandButton 控制項,並將其命名為 cmdConnect和cmdSent。
8. 將cmdConnect控制項的標題改為 Connect, 將cmdSent控制項的標題改為 Sent。
9. 在窗體中添加如下的代碼。
Private Sub cmdConnect_Click()
On Error GoTo ErrorPro
sckClient.Connect
Exit Sub
ErrorPro:
MsgBox "伺服器未開或網路出錯!"
End
End Sub
Private Sub cmdSent_Click()
sckClient.SendData txtSent.Text
End Sub
Private Sub Form_Load()
' RemoteComputerName為伺服器端的計算機名或IP地址。
sckClient.RemoteHost = "RemoteComputerName"
sckClient.RemotePort = 1000
End Sub
Private Sub sckClient_Close()
MsgBox "伺服器通道已關閉!"
End
End Sub
Private Sub sckClient_Connect()
MsgBox "連接成功!"
cmdConnect.Enabled = False
End Sub
Private Sub sckClient_DataArrival(ByVal bytesTotal As Long)
Dim s As String
sckClient.GetData s
lstReceive.AddItem s
End Sub
Private Sub sckClient_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, _ ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
sckClient.Close
cmdConnect.Enabled = True
End Sub
4.3 伺服器端的程序
1. 在伺服器端創建一個新的工程將其命名為「ServerPrj」。
2. 將預設窗體命名為「frmServer」。
3. 在窗體中添加一個ListBox控制項,將其命名為「lstReceive」。
4. 在窗體中添加三個WinSock控制項,將其分別命名為「sckListen」,sckBusy和「sckServer」並將「sckServer」的「Index」屬性設置為0。
5. 在窗體中添加如下代碼.。
'最大通道數
Private MaxChan As Integer
Private Sub Form_Load()
Dim i As Integer
MaxChan = 10
For i = 1 To MaxChan - 1
Load sckServer(i)
Next i
sckListen.LocalPort = 1000
sckListen.Listen
End Sub
Private Sub sckBusy_Close()
sckBusy.Close
End Sub
Private Sub sckBusy_DataArrival(ByVal bytesTotal As Long)
sckBusy.SendData "伺服器忙,請稍後再連接!"
DoEvents
End Sub
Private Sub sckListen_ConnectionRequest(ByVal requestID As Long)
Dim i As Integer
'決定由哪一Winsock接受請求
For i = 0 To MaxChan - 1
If sckServer(i).State = 0 Then
Exit For
End If
Next i
If sckServer(i).State = 0 Then
sckServer(i).Accept requestID
Exit Sub
End If
'如果所有Winsock都用完則由專門的「忙」Winsock接受請求,以免用戶要求得不到響應
sckBusy.Close
sckBusy.Accept requestID
End Sub
Private Sub sckListen_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, _ ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
sckListen.Close
sckListen.LocalPort = 1000
sckListen.Listen
End Sub
Private Sub sckServer_Close(Index As Integer)
sckServer(Index).Close
End Sub
Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim s As String
Dim i As Integer
sckServer(Index).GetData s
If UCase(Left(Trim(s), 2)) = "PT" Then '判斷是否為悄悄話,點對點方式
If IsNumeric(Mid(Trim(s), 3, 1)) Then
i = Mid(Trim(s), 3, 1)
sckServer(i).SendData "Channel " & Index & " " & Right(Trim(s), Len(Trim(s)) - 3)
DoEvents
End If
Else '廣播方式
For i = 0 To MaxChan - 1
'利用winsock的State屬性給所有連接在伺服器上的客戶發消息
If sckServer(i).State = 7 Then
sckServer(i).SendData "Channel " & Index & " " & Trim(s)
DoEvents
End If
Next i
End If
lstReceive.AddItem "Channel " & Index & " " & Trim(s)
End Sub
Private Sub sckServer_Error(Index As Integer, ByVal Number As Integer, Description As String, _
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As _
Long, CancelDisplay As Boolean)
sckServer(Index).Close
End Sub
從程序中可以看到:第一,程序中限制了通道數(10路)。第二,通過判斷WinSock控制項的State屬性是否為0(關閉狀態),來重新使用已關閉的WinSock控制項。第三,通過給WinSock控制項傳遞的信息加上包頭,來對信息進行不同的處理(程序中若信息前加上了「PT"(Private Talk)+"通道數」的包頭,由此就知道客戶想要同擁有此「通道數」的另一客戶進行「悄悄話」,否則就以廣播方式將信息發給所有客戶)。
五) 結束語
WinSock控制項不僅僅是用來編制網上聊天程序,而且可以用來編制各種網路游戲或網路通信程序。實際上WinSock控制項是編制各種C/S程序的利器。在實際使用中通常是將WinSock控制項封裝在Activex DLL(進程內)、Activex EXE(進程外)部件的類中(類中引用)來使用的。通過區分所傳信息前的不同的包頭,用RaiseEvent命令引發不同 的事件,再對事件分別進行處理。這樣不僅增加了程序的可調試性和安全性,而且更符合事件驅動編程方法的特點。