如何通过套接字共享 Perl 数据结构?

2024-01-01

在套接字中我编写了客户端服务器程序。首先,我尝试在其中发送普通字符串,它发送得很好。之后,我尝试将哈希值和数组值从客户端发送到服务器,再将服务器发送到客户端。当我使用 Dumper 打印这些值时,它只提供参考值。我应该怎么做才能获取客户端服务器中的实际值?

服务器程序:

use IO::Socket;
use strict;
use warnings;

my %hash = ( "name" => "pavunkumar " , "age" => 20 ) ;
my $new  = \%hash ;
#Turn on System variable for Buffering output
$| = 1;
# Creating a a new socket
my $socket=
IO::Socket::INET->new(LocalPort=>5000,Proto=>'tcp',Localhost =>
        'localhost','Listen' => 5 , 'Reuse' => 1 );
die "could not create $! \n" unless ( $socket );
        print "\nUDPServer Waiting port 5000\n";
        my $new_sock =  $socket->accept();
        my $host =  $new_sock->peerhost();
        while(<$new_sock>)
        {
        #my $line = <$new_sock>;
        print Dumper "$host $_";
        print $new_sock $new . "\n";
        }
        print "$host is closed \n" ;

客户程序

use IO::Socket;                               
use Data::Dumper ;                            
use warnings ;                                
use strict ;                                  

my %hash  = ( "file" =>"log.txt" , size => "1000kb") ;

my $ref = \%hash ;


# This client for connecting the specified below address and port 
# INET function will create the socket file and establish the connection with
# server

my $port = shift || 5000 ;
my $host = shift || 'localhost';
my $recv_data ;
my $send_data;
my $socket = new IO::Socket::INET (
                                  PeerAddr  => $host ,
                                  PeerPort  => $port ,
                                  Proto => 'tcp', )

or die "Couldn't connect to Server\n";
while (1)
{
        my $line = <stdin> ;
        print $socket $ref."\n";
        if ( $line = <$socket> )
        {
                print Dumper  $line ;
        }
        else
        {
                print "Server is closed \n";
                last ;
        }

}

我已经给出了关于我正在做的事情的示例程序。谁能告诉我我在做什么 这段代码有错吗?我需要做什么来访问哈希值?


当你说

print $ref;

,你在某种程度上指示 Perl 转向$ref转换为字符串(因为只有字符串可以print编辑)。事实证明,默认情况下引用不会变成非常有用的字符串。

你需要转身$ref转换为一个字符串,您可以通过线路发送该字符串,然后在另一端进行解码以将数据传回。此过程称为“序列化”。Data::Dumper的输出实际上是其参数的有效序列化,但 Perl 中的基本序列化模块是Storable http://perldoc.perl.org/Storable.html.

从程序上来说,你可以说[1]

use Storable qw(nfreeze); # nfreeze rather than freeze because
                          # we want a network-portable string
...
print nfreeze($ref);

一侧和

use Storable qw(thaw);
...
my $ref = thaw($line);

在另一。

还有一个 OO 接口;阅读Storable文档以获取更多信息。

[1]:注意 yaddayaddas。这是不完整的代码,仅说明与您的代码的主要区别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过套接字共享 Perl 数据结构? 的相关文章

  • 如何从任何进程关闭 Windows 上的套接字(ipv4 和 ipv6)连接?

    如何在 Windows 上关闭 tcp v4 和 tcp v6 连接 我不想终止具有开放连接的整个进程 因为这显然会将其他人踢出该进程 我需要从一个单独的进程执行此操作 因此无法访问套接字句柄等 我正在使用 Windows API 来获取
  • 应用程序内的 SQLite 文件版本兼容性

    我有一个 C NET 应用程序 一种复杂的计算应用程序 其中用户输入数据 处理后的信息使用 JSON 序列化和 EF 保存到 SQLite 文件中 需要时可以将其加载到我们的应用程序中 应用程序在开发过程中经历了很多变化 类也被修改 因此
  • 当我退出应用程序时,如何删除 UNIX 域套接字文件?

    我有一个服务器应用程序 它在特定路径中创建一个 UNIX 域套接字 其名称和bind 到它 仅当我有意从应用程序代码中关闭 停止应用程序时 我才需要删除套接字 否则需要打开 我该怎么做呢 Thanks Edit 考虑一下我从终端内部启动并运
  • 迭代哈希数组

    我编写了下面的例程 迭代哈希值 0 7 并打印出每个哈希值中特定键的值 我需要获取每个哈希中 b4 的值 我想取消 0 7 当存在不同数量的哈希值时使用更智能的东西 例如 有时只有 2 个 也可能有 160 个 my out decode
  • 使用套接字和 AsyncTask 强制关闭

    堆栈的人们大家好 请参阅下面我的班级代码和我的 LogCat 尝试连接时我受到强力关闭 如果有人能帮助我找出原因 我将不胜感激 基本上代码的作用是 从意图中获取 IP 地址 连接到端口 32 的 IP 然后发送一个命令 等待响应并发送另一个
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何使用 Perl 更改 mysql 密码

    我需要使用 Perl 脚本更改一些 mysql 密码 以下内容在更改数据库条目时有效 但是当我针对 mysql 用户更改修改它时 它将它们重置为空白密码 最后 刷新权限 也很好 但我还没有找到方法 usr bin perl use DBI
  • 使用 Perl 获取 值

    因此 我有一个报告工具 可以在 HTML 文件中输出作业调度统计信息 并且我希望使用 Perl 来使用这些数据 但我不知道如何单步浏览 HTML 表 我知道如何使用 jQuery 来做到这一点 find tr each function v
  • 根据插入顺序迭代哈希?

    不想对条目进行排序 使用它也不会保留顺序 foreach my val keys hash 默认情况下 Perl 5 中的哈希值是无序的 您可以使用tie http perldoc perl org functions tie html a
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • perl-5.10 之前的高效版本相当于 pack("Q>")

    更新 萨尔瓦正确地指出我对 Q 包模板的介绍是错误的 这是 gt 修饰符 不会返回到 5 8 Perl 5 10 引入了 pack 修饰符 gt 对于我使用 Q 的用例 它将一个无符号四边形 64 位 值打包在大尾数法 现在 我正在寻找一个
  • UDP SocketException - 通常只允许每个套接字地址使用一次

    尽管这里有很多非常相似的问题 但提供的答案都没有帮助我 这让我很难过 我有一个非常大的管理系统 我的任务是为其编写一些 UDP 数据包发送 接收 我已经编写了一个原型 一切都很好 所以我开始将我的代码合并到所述系统中 然而 我现在弹出了一个
  • 如何用另一个响应替换窗口的 URL 哈希?

    我正在尝试使用替换方法更改哈希 URL document location hash 但它不起作用 function var anchor document location hash this returns me a string va
  • 将 HTML 转换为 Excel 的最佳方法是什么

    我有一个 HTML 页面 其中包含 Flash 图表 FusionCharts 和 HTML 表格 我需要将这整个事情转换成Excel HTML 表格应显示在 Excel 工作表的单元格中 Flash 图表可以显示为图像 我们可以使用任何开
  • 使用 LWP::Agent 的 Perl JSON::RPC::Client

    我被要求不使用 JSON RPC Client 而是使用 LWP 进行调用 这是我的代码 Server usr bin perl use strict use lib use ServerLib use JSON RPC Server Da
  • Perl 三元条件运算符

    我正在尝试在脚本中编写更高效的代码 并且有时会实现三元条件运算符 我不明白为什么在循环中使用三元条件运算符时会得到额外的结果 usr bin perl use strict use warnings my array Serial 123
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E
  • 是否有理由在 Perl 中使用 open(...) 的双参数形式?

    是否有任何理由使用双参数形式open 在 Perl 中而不是三个或更多参数的版本 我能想到的唯一原因是明显的观察结果 即两个参数的形式更短 但是假设冗长不是问题 是否有任何其他原因会让您选择双参数形式open 一参数和二参数 open 应用
  • 当值相同时,为什么我的值比较返回 false?

    我有一个 perl 脚本 可以将 Excel XLS 文件中的数据加载到数据库中 首先 它检查文件中的值的日期时间是否已存在于数据库中 如果是 它会检查文件中的值是否与数据库中的值相同 如果它们相同 则跳过该值 如果不同 则更新数据库中的值
  • 最好的 Flash 音频/视频 + 交互服务器?

    我正在寻找有关 Flash 实时服务器的建议 目前 我们使用 Moock 的组合Unity http www moock org unity and Red5 http osflash org red5 但有几个问题 首先 我们正在转向 A

随机推荐

  • jsf中鼠标悬停时如何突出显示扩展数据表的行?

    我试图在鼠标悬停时突出显示扩展数据表的行 这是我的数据表
  • 为什么 JavaScript 对字符串和数字之间的加号和减号运算符的处理方式不同?

    我不明白为什么 JavaScript 会这样工作 console log 1 1 console log 1 1 第一行打印 11 第二行打印 0 为什么 JavaScript 将第一个作为字符串处理 第二个作为数字处理 字符串连接是通过
  • 具有细粒度访问控制的 Django 身份验证

    我正在为结构工程师开发一个 Django Web 应用程序 其中包含一套钢结构设计工具 每个设计工具都会有一个数据库输入表 每个表的每一行都对应于要 解决 的特定设计条件 用户可以单独工作或分组工作 每个用户都需要持续访问自己的工作 以便可
  • 读取空白文本文件时出现错误?

    使用VB6 当我读取空白文本文件时 将错误显示为输入超出文件结尾 Code Dim fso As FileSystemObject Dim TS As TextStream Dim TempS As String Dim Final As
  • WCF 服务。在哪里添加。 .svc 文件

    我创建了一个新的 WCF 服务库 类型项目 我已经为我的合同创建了一个文件和一个实现该接口的文件 这两个文件的扩展名为 cs 请谁能告诉我如何食用它 我的意思是我应该在哪里添加我的 svc 文件 您必须创建另一个项目 Web 应用程序或 W
  • Xamarin Forms Android 透明状态栏

    我创建了一个 Xamarin Forms 项目 但无法将 Android 状态栏颜色更改为透明 我在 MainActivity 的 OnCreate 方法中以编程方式更改颜色 如下所示 if Build VERSION SdkInt gt
  • 启动默认编辑器(如“webbrowser”模块)

    有没有一种简单的方法可以从 Python 命令行工具启动系统默认编辑器 例如网页浏览器 http docs python org library webbrowser html module 在 Windows 下 您可以简单地 执行 该文
  • 使用 WinDbg 查找堆上所有 X 类型的 C++ 对象

    我正在尝试查找所有类型的对象module SomeClass在堆中 我认为这样的命令会起作用 gt s v 0 L 0xfffffff module SomeClass 但可惜 事实并非如此 如果我知道如何找到该类的 vtable 地址 我
  • 缓冲区溢出在 gdb 中有效,但没有它就不行

    我使用 CentOS 6 4 32 位 并试图在程序中导致缓冲区溢出 在 GDB 中它可以工作 这是输出 root localhost bufferoverflow gdb stack GNU gdb GDB Red Hat Enterpr
  • 为什么可以使用额外参数调用 Boost.Bind 函数?

    include
  • CakePHP 验证不起作用

    我是 cakephp 的新手 我需要验证表单 这是代码 控制器
  • 颜色检测算法 - 我应该怎么做?

    我在设计颜色检测系统方面有点陷入困境 我不太想出一种轻松完成它的方法 基本上 我有一个图像库 我想按颜色排序 因此 如果用户指定 按蓝色排序 则蓝色最多的图像将出现在结果的顶部 蓝色最少的图像将出现在底部 问题是图像并不全是一种颜色 所以它
  • c 中的 doxygen:定义分组

    我正在使用 doxygen 记录 C 代码 为了使文档更具可读性 我希望至少使用 defgroup 和 ingroup 将每个 c h 文件对中的代码添加到一组 在这些组中 我想使用 name 块将一些定义分组 在一起 文件 页面中的结果看
  • ASP.NET Core 中的声明问题(更新数据库后用户仍然有一些声明)

    我正在学习 asp net core 但我陷入了困境 我会尝试以某种方式解释 问题在于用户索赔 当我登录网站时 用户可以创建和删除声明并且所有工作都可以进行 但是 当该用户更改他无法删除某些内容时 更新数据库后他仍然可以 在数据库中删除消失
  • 禁用sequelize.js中的updatedAt(更新日期)字段

    I used sequelize auto生成模式 我尝试使用findOne 我得到了这个错误 未处理的拒绝 SequelizeDatabaseError 列名无效 更新时间 在我的数据库表中 没有字段updatedAt 例如我的表名是Us
  • 直接从模型实例化查询构建器

    当我做类似的事情时SomeModel with user 它返回一个Query Builder实例 我怎样才能获得这个实例而不需要调用with 或类似的 例如 我尝试过 new SomeModel 但它显然会返回我的模型的实例 而不是查询生
  • GNU Makefiles 中是否有类似 python 装饰器的机制?

    我发现自己在 Makefile 中声明 GNU make 目标是假的两种可能性之间有点左右为难 一是一次性宣布所有假货 PHONY targ1 targ2 targ3 targ1 targ2 targ3 其优点是 对我来说 更具可读性并且更
  • 使用 OR 运算符的复合查询 flutter 和 firebase [重复]

    这个问题在这里已经有答案了 我正在创建一个 flutter 应用程序 它应该查询 Firestore 集合并在满足两个条件时返回结果 这是我的代码 Stream
  • Flutter ImageIcon 显示图像白色或黑色

    所以我一直在尝试使用我存储在资产中的图片并将其用作徽标 这样我就可以将徽标制作成动画 而不仅仅是将其作为静态图片 但徽标始终只显示白色 或者当我尝试将其包裹并将颜色设置为空时 它会显示全黑色 所以想知道如何让它显示我的原始图像 new Ic
  • 如何通过套接字共享 Perl 数据结构?

    在套接字中我编写了客户端服务器程序 首先 我尝试在其中发送普通字符串 它发送得很好 之后 我尝试将哈希值和数组值从客户端发送到服务器 再将服务器发送到客户端 当我使用 Dumper 打印这些值时 它只提供参考值 我应该怎么做才能获取客户端服