Perl IO:Socket IO:Select server client

  1. server程序

接受客户端信息,并发送回应

#!/usr/bin/perl -w

# socket_server.pl

use strict;

use IO::Socket;

use IO::Select;

# hash to install IP Port

my ($ser_addr, $ser_port)=("127.0.0.1", "12345");

our($buffer, $len);

my $socket = IO::Socket::INET->new(

LocalAddr => "$ser_addr",  #本机IP地址

LocalPort => "$ser_port",   #定义本机的Port,然后进行bind

Type => SOCK_STREAM,  #套接字类型

Proto => "tcp", #协议名

Listen => 200,  #定义listen的最大数

Blocking => 0,  #非阻塞

) or die "Can not create socket [email protected]";

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 [email protected]";

2.client

连接客户端,发送一个消息,并接受服务器端应答消息

#!/usr/bin/perl -w

# Socket_client.pl

use strict;

use IO::Socket;  ##IO::Socket::INET模块是IO::Socket模块的子模块,不用重新use。

use IO::Select;  ##该模块和Linux下select()函数实现的功能一致,另扩展更过的功能。可以perldoc查看。

for (my $i=0; $i<20000; $i++){

&send_rev_data;

}

sub send_rev_data{

my ($ser_addr, $ser_port) = ("127.0.0.1", "12345");

##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 [email protected]";

$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;

}

}

}

#$socket->close() or die "Close Socket [email protected]";

}

时间: 2024-10-26 15:24:18

Perl IO:Socket IO:Select server client的相关文章

nodejs 基于socket.io实现聊天室

由于之后要做的网页视频直播项目要用到socket.io模块,所以特地花时间研究了下,参照网上的代码做了些改进,自己写了个聊天室代码.不得不承认后端事实推送能力有点厉害,这是以前我用php一直苦恼的事情.下面简单介绍下我的项目,顺带讲解下nodejs. 事实上,在看别人写的代码之前,我一直不知道nodejs是干嘛的,直到真正接触到才明白这也可以算作是服务端代码,丰富的第三方库使其功能极其强大.它可以像golang的beego一样直接通过命令行开启服务器,不过要用到express模块.加载模块的方式

node+express+socket.io制作一个聊天室功能

首先是下载包: npm install express npm install socket.io 建立文件: 服务器端代码:server.js 1 var http=require("http"); 2 var express=require("express"); 3 var sio=require("socket.io"); 4 5 var app=express(); 6 app.use(express.static(__dirname+

[Node.js] Level 6. Socket.io

6.2 Setting Up socket.io Server-Side So far we've created an Express server. Now we want to start building a real-time Q&A moderation service and we've decided to use socket.io. Using the http module, create an new http server and pass the expressapp

Socket.IO 概述

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3826251.html Socket.IO简述 Socket.IO用于浏览器与node.js之间实现实时通信.Socket.IO设计的目标是支持任何的浏览器,任何Mobile设备.支持主流的PC浏览器 (IE,Safari,Chrome,Firefox,Opera等),Mobile浏览器(iphone Safari/ipa

[Nodejs]利用Socket.IO配合Express4搭建即时聊天

Socket.IO为WebSockets这个较新的web技术提供了必要的支持,包含客户端与服务端模块,以便建立通信通道,当然也可作为中间件而存在. 1 创建一个express项目 ????????? ????? 防工具盗链抓取[如果显示此文字,代表来自第三方转发] freddon所有 ??? ??????????? 可以使用命令行初始化一个express项目 先安装express npm install express npm install express-generator express 

使用Node.js+Socket.IO搭建WebSocket实时应用【转载】

原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询(Polling)和Comet技术,Comet又可细分为两种实现方

socket.io实践(一.实现简单的图表推送)

引子:随着nodejs蓬勃发展,虽然主要业务系统因为架构健壮性不会选择nodejs座位应用服务器.但是大量的内部系统却可以使用nodejs试水,大量的前端开发人员转入全堆开发也是一个因素. 研究本例主要为后期BI软件,CRM图标系统使用nodejs socket做铺垫.主要实现的是一个分析表图的推送. socketio.io 代码库以及官网 https://github.com/socketio/socket.io http://socket.io/ 使用redis来实现集群读写 消息 (采用订

使用socket.io+redis来实现基本的聊天室应用场景

本文根据socket.io与redis来实现基本的聊天室应用场景,主要表现于多个浏览器之间的信息同步和实时更新. 首先看下基本的应用场景:多个浏览器同时跟webServer连接,可实时获取webServer推送的数据,如显示某一项实时更新的数据,多个client之间同步消息等. 这里,需要使用到socket.io和redis的publish机制. 1, socket.io连接于浏览器和nodejs的http服务器之间,可用于二者之间同步数据. 2, redis是一种key-value的数据库,可

Nodejs 中使用Socket.io

安装socket.io npm install socket.io 或者在package.json文件中添加socket.io的依赖包,然后npm install安装所需模块. 在Express http服务器中使用socket.io 在 bin/www 文件中添加: var io = require('socket.io'); var socket = io.listen(server); socket.on('connection', function(client) { console.l