提示信息

Perl Socket编程:完整实例

夜已深 已关注

在 Perl 中进行 Socket 编程可以通过使用其内置的模块 IO::Socket 来实现。下面是一个简单的客户端-服务器程序的完整实例,展示了如何使用 Perl 进行 Socket 编程。

服务器端程序

  1. use strict;
  2. use warnings;
  3. use IO::Socket::INET;
  4. # 自动刷新输出缓冲区
  5. $| = 1;
  6. # 创建一个监听于本地8000端口的服务器socket
  7. my $server = IO::Socket::INET->new(
  8. LocalHost => '0.0.0.0',
  9. LocalPort => 8000,
  10. Proto => 'tcp',
  11. Listen => 5,
  12. Reuse => 1
  13. ) or die "无法创建Socket服务器, $!\n";
  14. print "服务器已启动,在端口8000上监听\n";
  15. while (1) {
  16. # 等待客户端连接
  17. my $client_socket = $server->accept();
  18. # 获取客户端地址和端口
  19. my $client_address = $client_socket->peerhost();
  20. my $client_port = $client_socket->peerport();
  21. print "客户端 $client_address:$client_port 已连接。\n";
  22. # 读取客户端发送的数据
  23. my $data = "";
  24. $client_socket->recv($data, 1024);
  25. print "从客户端接收到的数据: $data\n";
  26. # 发送响应到客户端
  27. my $response = "服务器收到信息: $data";
  28. $client_socket->send($response);
  29. # 关闭客户端连接
  30. shutdown($client_socket, 1);
  31. }
  32. $server->close();

客户端程序

  1. use strict;
  2. use warnings;
  3. use IO::Socket::INET;
  4. # 配置要连接的服务器地址和端口
  5. my $server_host = '127.0.0.1';
  6. my $server_port = 8000;
  7. # 创建一个客户端socket
  8. my $socket = IO::Socket::INET->new(
  9. PeerHost => $server_host,
  10. PeerPort => $server_port,
  11. Proto => 'tcp'
  12. ) or die "无法连接到服务器 $!\n";
  13. print "成功连接到服务器 $server_host:$server_port\n";
  14. # 要发送的数据
  15. my $message = "Hello from Client";
  16. print "发送数据到服务器: $message\n";
  17. $socket->send($message);
  18. # 接收来自服务器的响应
  19. my $response = "";
  20. $socket->recv($response, 1024);
  21. print "来自服务器的响应: $response\n";
  22. # 关闭连接
  23. $socket->close();

运行方法

  1. 先运行服务器端脚本,它会在本地的 8000 端口监听。
  2. 然后运行客户端脚本,客户端会尝试连接服务器,并发送一条消息。

注意事项

  • 在实际使用中,把 LocalHost 换成实际的 IP 地址。
  • 需要在同一网络或相同网络环境下测试此程序。
  • 测试过程中,请确保端口 8000 未被占用。
  • 防火墙可能需要配置以允许流量通过此端口。
  • 生产环境中请考虑处理多线程、多进程或事件驱动的服务器实现,来应对高并发连接。可以借助 CPAN 上众多的模块如 IO::Select 或者 AnyEvent
    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
夜已深 关注 已关注

最近一次登录:2024-11-20 12:56:55   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图