Perl 客户机-服务器设置是在机器之间移动数据的好方法吗?

Perl 客户机-服务器设置是在机器之间移动数据的好方法吗?,perl,sockets,client-server,Perl,Sockets,Client Server,我需要将一些数据从一台机器移动到另一台机器。使用Perl中的套接字编写客户机-服务器应用程序来进行传输是一个好主意吗?如果一方是用Java编写的,我会有问题吗 我的意思是,在尝试上述操作时,我是否应该意识到我可能会遇到的任何问题?您没有说是否需要实现应用程序以支持任何特定的协议,或者是否需要实现自主开发的协议。Perl中的网络支持非常灵活,可以支持(或两者之间的大多数地方) 在底层套接字端,无论您使用什么语言,您的代码都将非常相似——BSD套接字API在任何支持它们的地方都非常相同。对此所需的支

我需要将一些数据从一台机器移动到另一台机器。使用Perl中的套接字编写客户机-服务器应用程序来进行传输是一个好主意吗?如果一方是用Java编写的,我会有问题吗


我的意思是,在尝试上述操作时,我是否应该意识到我可能会遇到的任何问题?

您没有说是否需要实现应用程序以支持任何特定的协议,或者是否需要实现自主开发的协议。Perl中的网络支持非常灵活,可以支持(或两者之间的大多数地方)

在底层套接字端,无论您使用什么语言,您的代码都将非常相似——BSD套接字API在任何支持它们的地方都非常相同。对此所需的支持内置于Perl中,但低级套接字编程可能令人沮丧——它的级别非常低

然而,Perl的标准库包含了Socket模块,它更易于使用(并且有很好的文档记录)

如果您需要实现一个现有的协议,您可能会发现它已经实现了。例如,实现命令/响应协议(如Telnet)使客户端应用程序变得微不足道


搜索CPAN可以帮你省去很多痛苦。看看网络中的模块::*层次结构

你基本上在问两个问题:

  • Perl是用于套接字通信的合适语言吗
  • Perl是UI的合适语言吗
  • 参考e5的答案,Perl确实是一种以字符串为中心的语言,它关注可读字符串,不太适合处理二进制数据。因此,答案可能在于以下问题:您的通信是否基于字符串?你的UI是基于字符串的吗


    如果通过套接字进行二进制交互,那么您可能会比Perl做得更好(不是说C,而是说C-ish语言)。如果您想进行图形用户交互,您可以通过选择一种更注重gui交互的高级语言来获得更快的结果。(这里可能是Java-ish。)

    我脑子里只想到一个问题:大多数基于文本的网络协议使用
    CRLF
    作为行结尾,但UNIX类型机器上的Perl默认采用
    LF
    结尾,这意味着如果要使用
    readline
    (aka)和
    print
    (还要注意
    printf
    ,因为它不使用输出记录分隔符),则需要更改输入和输出记录分隔符。当然,如果您要使用预先存在的协议,那么CPAN上可能已经有了
    Net::
    模块,因此您不必担心这一点。如果您正在设计自己的协议,我将保留
    CRLF
    约定,因为它可以方便地使用
    telnet
    调试服务器(这实际上是该程序的最后一次有效使用)。

    用Perl编写套接字通信相对容易。即使CPAN模块是容易出错的代码示例,正确和可靠地执行也是一大难题。这取决于您的期望。

    我认为您不会遇到不使用Perl所不会遇到的任何重大问题。由于网络延迟,甚至性能也将与其他解决方案相当。
    你可能想看看。编写这样的组件轻而易举。

    简单回答:使用Perl程序作为客户机或服务器很好。你唯一的问题可能是你的个人技能和经验水平,但在你做到这一点后,你知道如何做到这一点大多数问题在于选择需要如何做,而不是选择所涉及的技术。Perl不会成为问题,但与其他语言相比,它也没有优势


    正如一些人已经注意到的,问题的套接字部分在大多数语言中都是相同的,因为几乎所有东西都使用BSD。Perl对此没有任何障碍或特殊的障碍。要在周围移动数据,请创建一边监听套接字,另一边打开连接并发送数据。简单的豌豆。你可能想去林肯·斯坦家看看。这可以让你得到低层次的比特

    对于更高级别的网络,一旦开始,它非常有用并且易于使用。它是一个处理事件驱动编程的框架,有许多插件,可以方便地在进程之间进行通信。你可能会花一点时间学习它,但它也会给你很多回报

    如果您没有发明自己的协议,那么很可能已经有一个Perl模块可以格式化和解析消息

    如果您只想传输数据,可以做几件事。概念上最简单的方法可能只是将行写入套接字,然后从另一端将它们作为行读取。比这更复杂的是使用类似Data::Dumper、YAML或JSON的东西将数据序列化为文本并发送。对于更复杂的事情,例如共享Perl对象,您可能需要使用。冻结对象,通过网络将其作为数据发送,然后在另一端解冻


    如果您想用不同的语言实现您的客户机和服务器,您需要做更多的工作来了解它们如何相互通信。socket的内容基本上是一样的,但是Java服务器不会理解Perl的Storable的输出(这是可能的,但是您必须自己解析它,这是不好的:)。如果你做的每件事都是对的,任何一方都不应该在意你在另一方使用了什么。

    这可能取决于几个因素。速度或反应是否重要?您是否在同一类型的计算机(Unix到Unix,Windows到Windows)之间移动数据?您正在尝试移动哪种类型的数据(文本或二进制)?关于套接字的知识是什么?您有哪些语言经验

    我通过PERL套接字从不同的应用程序发送和接收二进制数据,但我对通过不同机器的套接字进行文本处理并没有太多经验。如果你要搬家,爸爸