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命令引发不同 的事件,再对事件分别进行处理。这样不仅增加了程序的可调试性和安全性,而且更符合事件驱动编程方法的特点。