如何用PERL编写聊天室服务器程序
日期:2008年2月26日 作者: 查看:[大字体 中字体 小字体]-
在这里我将告诉你如何来写一个小型的聊天室服务程序,可能会很简陋,有很多要扩展的地方.
先决条件:
你必须有很好的Perl编程的知识,一台服务器,安装Perl 5.002或更高的版本.注意大多数ISP不会允许普通用户运行聊天室程序.但是你也许可以通过一个MODEN连接来与少数几个用户试试你的聊天室系统. (如果你从CPAN获得了最新版本的IO:Select,这个聊天室程序可以在Windows环境下使用).
你还需要一个telnet客户端程序,因为我们要用来做聊天室的客户端.
Socket简易编程:
开始聊天,你需要在internet上建立一个连接,对Perl程序员来说,这意味着要和socket打交道.而以前这是很困难的,因为你不得不使用pack()来建立一个C结构来进行底层的系统调用.但在最新版的Perl中我们可以使用IO::Socket包,很容易地打开一个socket. 当用户连接聊天服务器时,telnet程序在指定的端口打开一个连接,所以服务器也必须在那个端口打开一个socket,监听所有进来的连接.下面如何通过IO::Socket来做到这一点:
use IO::Socket;
my $listening_socket =
IO::Socket::INET->new(Proto => 'tcp',
LocalPort => 2323,
Listen => 1,
Reuse => 1) or die $!;
所有参量的含义:
Proto: 定义网络所用的协议 - 在这里我们用的是TCP. 在internet上通常有两种协议用得比较广泛 - TCP 和 UDP. TCP适用于稳定的连接,可以重新发送丢失的数据包,而UDP用于那些不用重发数据包的场合(如实时音频数据流).
LocalPort: 定义连接的端口号.
Listen: 我们将监听来自其它计算机的连接,而不是自己建立一个连接.所以用户要先telnet到端口2323,然后运行了聊天服务程序的计算机来建立连接.
Reuse: 这个选项意思是如果我们"杀掉"聊天服务程序然后再重新启动,将能够马上重新使用原来的端口,而不用等待以前那个连接完全结束.
我们正等待某个连接的到来.... 一个连接到来以后,我们需要accept这个新的连接:
$socket = $listening_socket->accept;
一旦我们建立了一个连接,我们可以发送一些文字给这个用户(还不完全是,请看本文的结尾部分):
$socket->send("hellorn") or print "connection closed at other endn";
我们也可以接收用户发来的信息:
$socket->recv($line, 80);
if($line eq "") {
print "connection closed at other endn";
}
最后我们完成了连接,可以关闭它:
$socket->close;
大部分程序只在一个时刻处理一个用户.如果用户还没有准备好,程序就没有什么好做的.所以Perl程序没有从<stdin>读到什么东西,它就停下来等待直到用户准备好. (这叫blocking I/O.)
这种方式不能用于聊天服务程序,用户不可能排着队来.一个用户可能离开去喝些咖啡,但其它用户还在拼命地敲打键盘(聊天),服务程序还得处理他们的信息.
解决这个问题的一个办法是为每个用户创建一个入口(entity),或者用fork()创建另外一个进程,或者用多线程编程方法(遗憾地是Perl还用不了).这样系统就可以为多个用户服务, 但每个用户有他自己的入口(entity)等待他输入命令. 但是进程的系统开销比较大,如果很多用户登录的话,系统资源很快会变得不足.最好是用一个进程来处理所有人的请求.
我们真正需要的是要知道谁正在等待服务,必须马上处理(除非没有一个人想聊天).这就是select()函数所要做的.
象socket函数一样,select()曾经也是很难用,所以大多数程序员都尽量避免使用它. 但Perl给它加了一个面向对象编程的包装,叫做IO::Select,使得使用非常简单. - [1] [2] [3] [4] [5] [6] 下一页
-
- 如何用PERL编写聊天室服务器程序 相关文章:
- ·对面女孩看过来 QQ强制视频聊天
- ·QQ聊天技巧:我只加美女为我的好友
- ·语音聊天声音小?教你设置MIC
- ·视频聊天变了“味” 向“裸聊” 色情宣战
- ·QQ聊天宝典 文字类
- ·QQ聊天宝典 节日祝福
- ·如何用PERL编写聊天室服务器程序
- ·imhaha:在网页上与QQ聊天
- ·如何用木马取得远程电脑上QQ聊天纪录
- ·网上视频聊天步步通--001Webcom
- 如何用PERL编写聊天室服务器程序 相关软件
- ·QQ聊天室 V2.0 Beta
- ·99cu(9158)百人视频聊天室 V3.20(6.046)
- ·mv即时通讯聊天软件 V2007 Build 1010
- ·KK即时通聊天平台 V2007A
- ·CU2007多人视频聊天 V1.6
- ·QQ聊天记录查看器 V5.3
- ·QQ聊天记录器(qq-msg) V4.0 Build 20070705
- ·QQ聊天记录终结者 V2007 集成版
- ·QQ聊天记录偷看器 2007第二版
- ·V8000网络视频聊天软件 V1.0
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:Python 快速入门(三)
下一篇:Perl 变量(1)--纯变量
精品推荐
热点TOP10
- ·Perl实例:
- ·如何用PERL编写聊天室服务器程序
- ·Linux系统环境下的Socket编程详细解析
- ·系统比对[oscmp.pl]
- ·Perl的简单语法(与C语言语法的异同)
- ·Perl 语言全面编译
- ·perl与Mysql连接
- ·windows下Perl开发环境的安装和配置
- ·Perl教学 第十三篇 Perl的面向对象编程
- ·cgic: 为C语言编写CGI的C函数库
- ·客户端CGI——结合javascript、dhtml实现bbs的backoffice(二)
- ·使用简单的select就可以实现文本的索引访问
- ·用Perl写出自己的安全工具--初级
- ·Perl教学 操作符
- ·PERL里正则表达式的简介
- ·给 perl hacker 们看的(2)
- ·用getenv函数获取各种CGI环境变量
- ·Perl命令行应用介绍
- ·利用PERL WIN32::ODBC与数据库互连的一个实例
- ·MP3在线播放Web服务器的实现
