2.3 KiB
2.3 KiB
소켓
-
socket(소켓, 도메인, 타입, 프로토콜)
-
도메인:
PF_INET으로 지정합니다. -
타입: TCP/IP 연결을 사용하기 위해서는
SOCK_STREAM으로 지정합니다. -
프로토콜:
getprotobyname('tcp')
-
-
bind(소켓, 어드레스)
bind($socket, pack_sockaddr_in(9999, inet_aton('123.456.789.1'))); -
listen(소켓, 큐사이즈)
- 큐사이즈: 동시 연결 가능한 최대 숫자를 지정합니다.
-
accept(클라이언트소켓, 서버소켓) 일반적으로, 무한 루프 안에서 사용됩니다.
while (1){ accept($client_socket, $server_socket); } -
connect(소켓, 주소)
-
recv
-
send
-
shutdown, close
-
inet_aton
문자열 형식의 주소를
pack_sockaddr_in()에 전달하기 위한 바이너리 형식으로 변환합니다. -
inet_ntoa
-
inet_pton
첫 번째 매개변수는
AF_INET또는AF_INET6입니다. -
inet_ntop
Server
#!/usr/bin/perl
use warnings;
use strict;
use Socket;
my $port = 9999;
#
my $server;
socket($server, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
bind($server, sockaddr_in($port, INADDR_ANY)) or die $!;
listen($server, 10);
while(1) {
my $client;
my $paddr = accept($client, $server);
my($port, $iaddr) = sockaddr_in($paddr);
my $name = gethostbyaddr($iaddr, AF_INET);
print $client "Smile from the server";
print "Connection recieved from $name\n";
close $client;
}
# https://perldoc.perl.org/perlipc#Sockets%3A-Client%2FServer-Communication
-
socket()으로 소켓을 만듭니다.
-
bind()는 소켓과 포트 번호를 연결합니다.
-
listen()을 실행해서 해당 포트에 대해 수신 대기 상태로 만듭니다.
-
accept()를 사용해서 클라이언트와 연결합니다.
Client
#!/usr/bin/perl
use warnings;
use strict;
use Socket;
my $port = 9999;
my $host = "localhost";
my $socket;
my $iaddr = inet_aton($host);
my $paddr = sockaddr_in($port, $iaddr);
socket($socket, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
connect($socket, $paddr) or die $!;
my $line;
while ($line = <$socket>) {
print "$line\n";
}
close $socket or die "close: $!";
exit (0);
-
socket()으로 소켓을 만듭니다.
-
connect()를 통해서 서버 소켓에 연결합니다.