- 浏览: 257843 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (263)
- mysql (5)
- boost (6)
- 工具 (10)
- IT生活 (7)
- 多线程 (3)
- Ruby (15)
- php (2)
- MongoDB (39)
- 移动互联网 (2)
- 测试 (8)
- c++ (28)
- 书 (1)
- 网站 (3)
- 网络编程 (14)
- 开源软件 (1)
- 分布式计算 (1)
- 得得得 (1)
- php,wordpress (1)
- error (5)
- 编译 (2)
- 学习 (1)
- 杀毒软件 (1)
- dd (0)
- linux (21)
- 数据库 (1)
- STL (1)
- c++/c (5)
- 软件设计 (1)
- 操作系统 (4)
- 库 (2)
- win32 (1)
- s (0)
- openssl (1)
- perl (2)
- debug (1)
- windows (4)
- python (12)
- windows 防火墙 (1)
- vs (1)
- vim (2)
- vc (1)
- 浏览器插件的危害 (1)
- curl (0)
- 判断手机号码合法性的库 (0)
- 地址备注 (0)
- 安装 File::Slurp (1)
- cenos (2)
- shell (1)
- linunx (1)
- internet (1)
- software (1)
- widows (1)
- linux io (1)
- nginx (2)
- 算法 (2)
- google (1)
- protobuf (2)
- tengine (1)
- tools (1)
- lua (2)
- liunx (1)
- vcard (1)
- lua-iconv (1)
- 网络 (2)
- teat (0)
- ldconfig linux (0)
- awk (0)
- grep (0)
- windws (2)
- linux 命令 (1)
- tcp dump (1)
- vmware (1)
- question2answer (2)
- mongdb (1)
- 正则 (1)
- OCR (2)
- Windows Server (1)
最新评论
Perl中可以直接调用Linux下C库中Berkeley套接字内置接口,调用方式和C语言一致,只是换成Perl的语法而已。偶就不说了,网上一箩筐资料。
我使用Perl中的IO::Socket模块来开发,个人经验使用Perl语言开发的过程中能使用模块的尽量使用,一个是可靠,二个是方便,最主要的是便于跨平台的移植,Linux也好,windows也好只要安装了相应的模块,代码不需要修改直接运行。
Socket地址协议簇分为AF_UNIX、AF_INET、AF_INET6等,常用的也就是AF_INET,其它两种没用过,不好说。IO::Socket::INET模块(包含在模块IO::Socket中)是针对AF_INET开发的,所以正常情况下,都是结合这两个模块进行perl代码的书写。
Client端代码:
#!/usr/bin/perl -w
use IO::Socket; ##IO::Socket::INET模块是IO::Socket模块的子模块,不用重新use。
use IO::Select; ##该模块和Linux下select()函数实现的功能一致,另扩展更过的功能。可以perldoc查看。
# hash to install IP Port
%ser_info = (
"ser_ip" => "1.1.1.1",
"ser_port" => "8888",
);
&main();
sub main {
my $ser_addr = $ser_info{"ser_ip"};
my $ser_port = $ser_info{"ser_port"};
##IO::Socket::INET->new()用于初始化一个socket连接,其中集成了socket、inet_aton、connect、bind、listen等功能。就不需要单独转换IP地址为网络地址结构了,直接使用IP地址就ok了。
##具体参数下面单独介绍。
my $socket = IO::Socket::INET->new(
PeerAddr => "$ser_addr",
PeerPort => "$ser_port",
Type => SOCK_STREAM,
Proto => "tcp",
)
or die "Can not create socket connect.$@";
$socket->send("Client Ok!\n",0); ##发送消息至服务器端。
$socket->autoflush(1);
my $sel = IO::Select->new($socket); ##建立select对象
while (my @ready = $sel->can_read) { ##等待服务端返回的消息
foreach my $fh (@ready) {
if ($fh == $socket) {
while (<$fh>) {
print $_;
}
$sel->remove($fh);
close $fh;
close FILE;
}
}
}
$socket->close() or die "Close Socket failed.$@";
}
server端代码:
#!/usr/bin/perl -w
use IO::Socket;
use IO::Select;
# hash to install IP Port
%ser_info = (
"cli_ip" => "2.2.2.2",
"cli_port" => "9999",
"ser_ip" => "1.1.1.1",
"ser_port" => "8888",
);
&main();
sub main {
my $cli_addr = $ser_info{"local_ip"};
my $cli_port = $ser_info{"local_port"};
my $ser_addr = $ser_info{"ser_ip"};
my $ser_port = $ser_info{"ser_port"};
my $socket = IO::Socket::INET->new(
PeerAddr => "$cli_addr", #client端IP地址
PeerPort => "$cli_port", #client端端口号
LocalAddr => "$ser_addr", #本机IP地址
LocalPort => "$ser_port", #定义本机的Port,然后进行bind
Type => SOCK_STREAM, #套接字类型
Proto => "tcp", #协议名
Listen => 20, #定义listen的最大数
)
or die "Can not create socket connect.$@";
my $sel = IO::Select->new($socket);
while (my @ready = $sel->can_read) {
foreach my $fh (@ready) {
if ($fh == $socket) {
my $new = $socket->accept();
$sel->add($new);
}
else {
$len = $fh->recv($buffer,1024,0); #接收客户端消息
print "$buffer \n";
$fh->send("Server OK!\n",0); #发送服务端消息
$fh->autoflush(1);
$sel->remove($fh);
$fh->close();
}
}
}
$socket->close() or warn "Close Socket failed.$@";
}
还是使用模块开发简单一些吧。
下面简单介绍一下IO::Socket::INET->new()支持的参数。直接贴出search.cpan.org中的介绍,水平有限,就不翻译了啊。
PeerAddr Remote host address [:]
PeerHost Synonym for PeerAddr
PeerPort Remote port or service [()] |
LocalAddr Local host bind address hostname[:port]
LocalHost Synonym for LocalAddr
LocalPort Local host bind port [()] |
Proto Protocol name (or number) "tcp" | "udp" | ...
Type Socket type SOCK_STREAM | SOCK_DGRAM | ...
Listen Queue size for listen
ReuseAddr Set SO_REUSEADDR before binding
Reuse Set SO_REUSEADDR before binding (deprecated, prefer ReuseAddr)
ReusePort Set SO_REUSEPORT before binding
Broadcast Set SO_BROADCAST before binding
Timeout Timeout value for various operations
MultiHomed Try all addresses for multi-homed hosts
Blocking Determine if connection will be blocking mode
有几点注意,说明一下:
1:定义 "Listen" 就等于调用了 listen()函数,服务端必须的。
2:定义 “Type => SOCK_STREAM” 就等于调用了 connect()函数,客户端、服务端都是必须的。如果使用UDP(SOCK_DGRAM),客户端定义就ok了,服务端就不需要啦。
3:PeerHost、LocalHost 可以使用“hostname”或者“1.1.1.1”形式的IP地址。
4:PeerPort、LocalPort 可以使用“servicename”前提是必须定义的,Linux下在 "/etc/services" 中定义。建议直接使用数字“8888”
5:Blocking 值为0,表示非阻塞模式。不定义或者值为1,表示阻塞模式。
另有两个方法,也是常用的。
1:connected
if (defined $socket->connected()) {}
该函数用于判断当前socket连接是否连接上,如果连接上返回对端的地址,反之没有连接上则返回 "undef" 。
2:sockopt(OPT [, VAL])
该函数用于设置套接字选项值(等价于调用setsockopt()函数),如果不添加value值则返回套接字选项值的当前值(等价于调用getsockopt()函数)。
例如:设置建立长连接。$socket->sockopt(SO_KEEPALIVE,1);
转:http://blog.csdn.net/aten_xie/article/details/6581124
我使用Perl中的IO::Socket模块来开发,个人经验使用Perl语言开发的过程中能使用模块的尽量使用,一个是可靠,二个是方便,最主要的是便于跨平台的移植,Linux也好,windows也好只要安装了相应的模块,代码不需要修改直接运行。
Socket地址协议簇分为AF_UNIX、AF_INET、AF_INET6等,常用的也就是AF_INET,其它两种没用过,不好说。IO::Socket::INET模块(包含在模块IO::Socket中)是针对AF_INET开发的,所以正常情况下,都是结合这两个模块进行perl代码的书写。
Client端代码:
#!/usr/bin/perl -w
use IO::Socket; ##IO::Socket::INET模块是IO::Socket模块的子模块,不用重新use。
use IO::Select; ##该模块和Linux下select()函数实现的功能一致,另扩展更过的功能。可以perldoc查看。
# hash to install IP Port
%ser_info = (
"ser_ip" => "1.1.1.1",
"ser_port" => "8888",
);
&main();
sub main {
my $ser_addr = $ser_info{"ser_ip"};
my $ser_port = $ser_info{"ser_port"};
##IO::Socket::INET->new()用于初始化一个socket连接,其中集成了socket、inet_aton、connect、bind、listen等功能。就不需要单独转换IP地址为网络地址结构了,直接使用IP地址就ok了。
##具体参数下面单独介绍。
my $socket = IO::Socket::INET->new(
PeerAddr => "$ser_addr",
PeerPort => "$ser_port",
Type => SOCK_STREAM,
Proto => "tcp",
)
or die "Can not create socket connect.$@";
$socket->send("Client Ok!\n",0); ##发送消息至服务器端。
$socket->autoflush(1);
my $sel = IO::Select->new($socket); ##建立select对象
while (my @ready = $sel->can_read) { ##等待服务端返回的消息
foreach my $fh (@ready) {
if ($fh == $socket) {
while (<$fh>) {
print $_;
}
$sel->remove($fh);
close $fh;
close FILE;
}
}
}
$socket->close() or die "Close Socket failed.$@";
}
server端代码:
#!/usr/bin/perl -w
use IO::Socket;
use IO::Select;
# hash to install IP Port
%ser_info = (
"cli_ip" => "2.2.2.2",
"cli_port" => "9999",
"ser_ip" => "1.1.1.1",
"ser_port" => "8888",
);
&main();
sub main {
my $cli_addr = $ser_info{"local_ip"};
my $cli_port = $ser_info{"local_port"};
my $ser_addr = $ser_info{"ser_ip"};
my $ser_port = $ser_info{"ser_port"};
my $socket = IO::Socket::INET->new(
PeerAddr => "$cli_addr", #client端IP地址
PeerPort => "$cli_port", #client端端口号
LocalAddr => "$ser_addr", #本机IP地址
LocalPort => "$ser_port", #定义本机的Port,然后进行bind
Type => SOCK_STREAM, #套接字类型
Proto => "tcp", #协议名
Listen => 20, #定义listen的最大数
)
or die "Can not create socket connect.$@";
my $sel = IO::Select->new($socket);
while (my @ready = $sel->can_read) {
foreach my $fh (@ready) {
if ($fh == $socket) {
my $new = $socket->accept();
$sel->add($new);
}
else {
$len = $fh->recv($buffer,1024,0); #接收客户端消息
print "$buffer \n";
$fh->send("Server OK!\n",0); #发送服务端消息
$fh->autoflush(1);
$sel->remove($fh);
$fh->close();
}
}
}
$socket->close() or warn "Close Socket failed.$@";
}
还是使用模块开发简单一些吧。
下面简单介绍一下IO::Socket::INET->new()支持的参数。直接贴出search.cpan.org中的介绍,水平有限,就不翻译了啊。
PeerAddr Remote host address [:]
PeerHost Synonym for PeerAddr
PeerPort Remote port or service [()] |
LocalAddr Local host bind address hostname[:port]
LocalHost Synonym for LocalAddr
LocalPort Local host bind port [()] |
Proto Protocol name (or number) "tcp" | "udp" | ...
Type Socket type SOCK_STREAM | SOCK_DGRAM | ...
Listen Queue size for listen
ReuseAddr Set SO_REUSEADDR before binding
Reuse Set SO_REUSEADDR before binding (deprecated, prefer ReuseAddr)
ReusePort Set SO_REUSEPORT before binding
Broadcast Set SO_BROADCAST before binding
Timeout Timeout value for various operations
MultiHomed Try all addresses for multi-homed hosts
Blocking Determine if connection will be blocking mode
有几点注意,说明一下:
1:定义 "Listen" 就等于调用了 listen()函数,服务端必须的。
2:定义 “Type => SOCK_STREAM” 就等于调用了 connect()函数,客户端、服务端都是必须的。如果使用UDP(SOCK_DGRAM),客户端定义就ok了,服务端就不需要啦。
3:PeerHost、LocalHost 可以使用“hostname”或者“1.1.1.1”形式的IP地址。
4:PeerPort、LocalPort 可以使用“servicename”前提是必须定义的,Linux下在 "/etc/services" 中定义。建议直接使用数字“8888”
5:Blocking 值为0,表示非阻塞模式。不定义或者值为1,表示阻塞模式。
另有两个方法,也是常用的。
1:connected
if (defined $socket->connected()) {}
该函数用于判断当前socket连接是否连接上,如果连接上返回对端的地址,反之没有连接上则返回 "undef" 。
2:sockopt(OPT [, VAL])
该函数用于设置套接字选项值(等价于调用setsockopt()函数),如果不添加value值则返回套接字选项值的当前值(等价于调用getsockopt()函数)。
例如:设置建立长连接。$socket->sockopt(SO_KEEPALIVE,1);
转:http://blog.csdn.net/aten_xie/article/details/6581124
相关推荐
一个简单的perl脚本控制其它电脑开机例子,运用了udp协议的socket通信机制,通过目标电脑的MAC地址就可以控制其开机操作。
Perl Socket 编程 Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 本章节我们为大家接收 Perl 语言中如何使用 Socket 服务。 创建...
Socket.IO Redis发射器 @socket.io/redis-emitter软件包使您可以轻松地与另一个Node.js进程(服务器端)中的一组Socket.IO服务器进行通信。 发射器还提供其他编程语言版本: Java: : Python: : ...
使用ZmqSocket,您可以通过JavaScript代码与zmq套接字进行通信。 您可以连接,发送和接收字符串消息。 由于JavaScript不支持原始TCP连接,因此它使用Flash作为桥梁。 注意:这是从自动导入的 下载 可在下载部分...
针对目前我国煤矿井下作业中安全监测系统的应用现状,应用嵌入式Linux技术,采用套接字编程方法和Zigbee协议构建终端和主控端的网络通信渠道,提出了一种全新的无线监测系统上位机设计方案,并借助Perl语言对主控端进行...
6.集成Perl处理模块 7.集成代理服务器模块 8.支持实时监视服务器状态和定制服务器日志 9.支持服务器端包含指令(SSI) 10.支持安全Socket层(SSL) 11.提供用户会话过程的跟踪 12.支持FastCGI 13.通过第三方模块可以支持...
6.集成Perl处理模块 7.集成服务器模块 8.支持实时监视服务器状态和定制服务器日志 9.支持服务器端包含指令(SSI) 10.支持安全Socket层(SSL) 11.提供用户会话过程的跟踪 12.支持FastCGI 13.通过第三方模块可以...
9.4 Perl语言简介 9.5 一个简单的CGI例子 第三部分 X Window应用程序开发 第10章 X Window和Motif基础 10.1 简介 10.2 XWindow基本概念 10.3 启动Motif窗口管理器 10.4 设置Motif特性 10.5 Widget 第11章 ...
KjSslSocket是用于通过openSSL进行客户端服务器网络通信的库。 包括客户端服务器示例,其中服务器与许多客户端进行通信。 现在包括perl服务器示例。 将来我将为此编写QT接口
Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例...
一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码...
[目录]CGI,mod_perl,PHP,JSP比较 3. [目录]线程池的讨论 4. [目录]JDBC 5. [目录]EJB技术 1. [目录]EJB 的设计模式 6. [目录]Servlet Container 和 应用服务器 3. [目录]TOMCAT ...