Лучшее руководство по Perl Socket программирования в 2024 году. В этом руководстве вы можете изучить Функция сокета сервера,функции клиента,Полный пример,
Разъем также известный как "гнездо", приложение, как правило, выдается на "гнездо" на запрос запроса сети или сети ответ, так что процесс между узлами или между компьютером на могут общаться.
В этом разделе все мы получили Perl язык, как использовать Socket Services.
Используйте функциюсокета для создания сокета услуги.
Используйте функциюпривязки , чтобы связать порт.
Используйте функцию прослушивания дляпрослушивания порта.
Используйтепринимает функция принимает запросы клиентов.
Используйте функциюсокета для создания сокета услуги.
Использование функцииСоединить для подключения к разъему сервера.
Следующая диаграмма иллюстрирует поток передачи данных между клиентом и сервером:
Perl, мы используем функцию сокета () для создания сокета, синтаксис выглядит следующим образом:
socket( SOCKET, DOMAIN, TYPE, PROTOCOL );
Аналитические параметры:
Определяет протокол установлен доменный сокет , созданный. Например:
AF_INET
указывает сетевой протокол IPv4 AF_INET6
для IPv6 AF_UNIX
представляет локальный сокет (используя файл) Тип тип сокета может быть ориентированным на соединение или в SOCK_STREAM установления соединения или SOCK_DGRAM
ПРОТОКОЛ должно быть(getprotobyname ( 'TCP')) [2].Укажите фактический транспортный протокол.
Так вызов сокета функции следующим образом:
use Socket # 定义了 PF_INET 和 SOCK_STREAM socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);
Используйте привязку () назначить адрес сокета:
bind( SOCKET, ADDRESS );
Сокетом дескриптор сокета. Это адрес сокета (TCP / IP) содержит три элемента:
Семейство адресов (TCP / IP, является AF_INET, на вашей системе может быть 2)
Номер порта (например, 21)
Сетевой адрес (например, 10.12.12.168)
После того, как с использованием сокета () создает сокет, просто дать протокол они используют и не присваивать адреса. Перед тем как принять другое соединение хоста, необходимо сначала вызвать Bind () назначить адрес сокета.
Простые примеры являются следующие:
use Socket # 定义了 PF_INET 和 SOCK_STREAM $port = 12345; # 监听的端口 $server_ip_address = "10.12.12.168"; bind( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) or die "无法绑定端口! \n";
или умереть в адрес произошел сбой привязки исполнения.
Установив опцию SO_REUSEADDR setsockopt (), чтобы установить порт может быть повторно использован немедленно.
Функцияpack_sockaddr_in () для преобразования адреса в двоичный формат.
Функция Когда сокет и адрес привязки, слушать () начнет прослушивание возможных запросов на установление соединения. Тем не менее, это может гарантировать надежный поток данных только при использовании:
listen( SOCKET, QUEUESIZE );
Цоколь: дескриптор сокета.
QUEUESIZE: целое число является решением для контроля размера очереди, когда есть прибывает запрос на соединение, оно вступит прослушивания очереди, когда запрос на соединение принимает (), чтобы принять, удалены от монитора очереди, когда очередь заполнена, новые соединения запрос вернет ошибку.
После того, как соединение принято, она возвращает 0 в случае успеха, возвращения ошибки -1.
Функция принимает () принимает соединение запрос сокета. В случае успеха в сжатой форме сетевой адрес, в противном случае она возвращает FALSE:
accept( NEW_SOCKET, SOCKET );
Цоколь: дескриптор сокета.
АДРЕС: АДРЕС адрес сокета (TCP / IP) содержит три элемента:
Семейство адресов (TCP / IP, является AF_INET, на вашей системе может быть 2)
Номер порта (например, 21)
Сетевой адрес (например, 10.12.12.168)
принимаем (), который обычно применяется в бесконечном цикле:
while(1) { accept( NEW_SOCKET, SOCKT ); rururu. }
Приведенные выше примеры могут отслеживать в режиме реального времени на клиентские запросы.
подключить) системный вызов (настроить параметры соединения сокета дескриптор файла и адрес хоста.
connect( SOCKET, ADDRESS );
Следующий пример создает сокет подключения к экземпляру сервера:
$port = 21; # ftp 端口 $server_ip_address = "10.12.12.168"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) or die "无法绑定端口! \n";
Далее мы начинаем понимать все сокет приложения работают через полный пример:
Сервер Код server.pl:
#!/usr/bin/perl -w # Filename : server.pl use strict; use Socket; # 使用端口 7890 作为默认值 my $port = shift || 7890; my $proto = getprotobyname('tcp'); my $server = "localhost"; # 设置本地地址 # 创建 socket, 端口可重复使用,创建多个连接 socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "无法打开 socket $!\n"; setsockopt(SOCKET, SOL_SOCKET, SO_REUSEADDR, 1) or die "无法设置 SO_REUSEADDR $!\n"; # 绑定端口并监听 bind( SOCKET, pack_sockaddr_in($port, inet_aton($server))) or die "无法绑定端口 $port! \n"; listen(SOCKET, 5) or die "listen: $!"; print "访问启动:$port\n"; # 接收请求 my $client_addr; while ($client_addr = accept(NEW_SOCKET, SOCKET)) { # send them a message, close connection my $name = gethostbyaddr($client_addr, AF_INET ); print NEW_SOCKET "我是来自服务端的信息"; print "Connection recieved from $name\n"; close NEW_SOCKET; }
Откройте терминал, выполните следующий код:
$ perl sever.pl 访问启动:7890
Клиент client.pl Код:
#!/usr/bin/perl -w # Filename : client.pl use strict; use Socket; # 初始化地址与端口 my $host = shift || 'localhost'; my $port = shift || 7890; my $server = "localhost"; # 主机地址 # 创建 socket 并连接 socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]) or die "无法创建 socket $!\n"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server))) or die "无法连接:port $port! \n"; my $line; while ($line = <SOCKET>) { print "$line\n"; } close SOCKET or die "close: $!";
Откройте другой терминал, выполнить следующий код:
$ perl client.pl 我是来自服务端的信息