소켓은 "소켓"이라고도 합니다. 응용 프로그램은 일반적으로 "소켓"을 통해 네트워크에 요청을 보내거나 네트워크 요청에 응답하므로 컴퓨터의 호스트나 프로세스가 통신할 수 있습니다.
이 장에서는 Perl 언어로 소켓 서비스를 사용하는 방법을 설명합니다.
소켓 함수를 사용하여 소켓 서비스를 만듭니다.
바인딩 기능을 사용하여 포트를 바인딩합니다.
포트를 청취하려면 청취 기능을 사용하십시오.
클라이언트 요청을 수신하려면 수락 기능을 사용하십시오.
소켓 함수를 사용하여 소켓 서비스를 만듭니다.
connect 함수를 사용하여 소켓 서버에 연결합니다.
다음 다이어그램은 클라이언트와 서버 간의 통신 프로세스를 보여줍니다.
Perl에서는 소켓을 생성하기 위해 소켓() 함수를 사용합니다. 구문 형식은 다음과 같습니다.
소켓(SOCKET, DOMAIN, TYPE, PROTOCOL);
매개변수 분석:
DOMAIN 에 의해 생성된 소켓은 프로토콜 세트를 지정합니다. 예를 들어:
AF_INET
IPv4 네트워크 프로토콜을 나타냅니다.
AF_INET6
IPv6을 의미합니다.
AF_UNIX
로컬 소켓을 의미합니다(파일 사용).
TYPE 소켓 유형은 연결 지향인지 비연결인지에 따라 SOCK_STREAM 또는 SOCK_DGRAM으로 나눌 수 있습니다.
PROTOCOL 은 (getprotobyname('tcp'))[2] 이어야 합니다. 사용되는 실제 전송 프로토콜을 지정합니다.
따라서 소켓 함수 호출 방법은 다음과 같습니다.
소켓 사용 # PF_INET 및 SOCK_STREAMsocket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]) 정의;
소켓에 주소를 할당하려면 바인딩()을 사용하세요.
바인드(소켓, 주소);
SOCKET 소켓 설명자입니다. ADDRESS는 세 가지 요소를 포함하는 소켓 주소(TCP/IP)입니다.
주소 클러스터(TCP/IP는 AF_INET이며 시스템에서는 아마도 2일 것임)
포트 번호(예: 21)
네트워크 주소(예: 10.12.12.168)
소켓()을 사용하여 소켓을 만든 후에는 사용된 프로토콜만 부여되고 주소는 할당되지 않습니다. 다른 호스트로부터의 연결을 수락하기 전에 바인딩()을 호출하여 소켓에 주소를 할당해야 합니다.
간단한 예는 다음과 같습니다.
소켓 사용 # 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";
또는 주소 바인딩에 실패한 후 die가 실행됩니다.
setockopt() 옵션 SO_REUSEADDR을 설정하면 포트 설정을 즉시 재사용할 수 있습니다.
pack_sockaddr_in() 함수는 주소를 이진 형식으로 변환합니다.
소켓이 주소에 바인딩된 후, Listen() 함수는 가능한 연결 요청을 듣기 시작합니다. 그러나 이는 안정적인 데이터 흐름이 보장되는 경우에만 사용할 수 있습니다.
듣기(SOCKET, QUEUESIZE);
SOCKET: 소켓 설명자입니다.
QUEUESIZE: 수신 큐의 크기를 결정하는 정수입니다. 연결 요청이 도착하면 수신 큐에 들어가고, accept()에 의해 연결 요청이 수락되면 수신 큐에서 제거됩니다. 대기열이 가득 차면 새 연결 요청이 오류를 반환합니다.
연결이 승인되면 성공 시 0이 반환되고 오류 시 -1이 반환됩니다.
accept() 함수는 요청된 소켓 연결을 수락합니다. 성공하면 네트워크 주소의 압축된 형식을 반환하고, 그렇지 않으면 FALSE를 반환합니다.
수락( NEW_SOCKET, SOCKET );
NEW_SOCKET: 소켓 설명자입니다.
SOCKET: 소켓 설명자입니다.
accept()는 일반적으로 무한 루프에서 사용됩니다.
while(1) { 수락( NEW_SOCKET, SOCKT ) .....}
위의 예에서는 클라이언트 요청을 실시간으로 모니터링할 수 있습니다.
connect() 시스템 호출은 소켓에 대한 연결을 설정합니다. 매개변수는 파일 설명자와 호스트 주소입니다.
연결(소켓, 주소);
다음은 서버 소켓에 연결된 인스턴스를 생성합니다.
$port = 21; # ftp 포트 $server_ip_address = "10.12.12.168"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) 또는 die "포트를 바인딩할 수 없습니다! n";
다음으로, 모든 소켓 기능의 적용을 이해하기 위해 완전한 예를 사용합니다.
서버 server.pl 코드:
터미널을 열고 다음 코드를 실행합니다.
$ perl sever.pl 액세스 시작: 7890
클라이언트 client.pl 코드:
다른 터미널을 열고 다음 코드를 실행합니다.
$ perl client.pl나는 서버에서 온 정보입니다