>  기사  >  php教程  >  Perl 언어를 사용한 소켓 프로그래밍

Perl 언어를 사용한 소켓 프로그래밍

黄舟
黄舟원래의
2016-12-16 13:54:461137검색

네트워크 프로그래밍은 신비롭고 복잡한 예술이지만 매우 흥미롭습니다. Perl 언어는 풍부한 TCP/ip 네트워크 기능을 제공하며, 이 기능은 모두
C 언어의 소켓 라이브러리 기능에서 직접 파생됩니다.
Perl 언어와 C 언어의 소켓 라이브러리 기능은 유사합니다. 스타일과 사용법이 동일하므로 소켓 프로그래밍에는 Perl 언어를 사용하고 물론
소켓 프로그래밍에는 C 언어도 사용합니다.
다음은 Perl 언어의 관련 소켓 라이브러리 함수 목록입니다.
함수 프로토타입 사용 지침
accept(NEWSOCKET,GENERICSOCKET)는 요청된 소켓 연결을 수락합니다. 성공하면 네트워크 주소를 압축 형식으로 반환하고, 그렇지 않으면 FALSE를 반환합니다.
예:
if(!$ Connect=accept(NEW,HANDLE))
{
die "Connectionfailed:$!
";
}
bind(SOCKET,NAME)는 NAME과 SOCKET 사이의 바인딩을 설정합니다. 여기서 NAME 올바른 소켓 유형에 해당하는 압축된 주소여야 합니다.
성공하면 true를 반환하고 그렇지 않으면 false를 반환합니다.
네트워크 프로그래밍에 소켓을 사용할 때 이 함수는 소켓 핸들 간의 연결을 설정하므로 매우 중요합니다. 및 네트워크의 주소.
예:
bind(SH,$SocketAddress);
connect(SOCKET,NAME)는 accept() 함수를 호출하고 대기 중인 다른 프로세스와 통신을 시도합니다.
성공하면 True를 반환하고, 그렇지 않으면 false를 반환합니다. NAME은 올바른 SOCKET 핸들 유형에 해당하는 압축 주소여야 합니다.
예:
connect(SOCK,$address)||die " Can'tconnectwithremotehost:$!
";
gethostbyaddr(ADDRESS,TYPE)은 압축된 네트워크 주소를 사람이 읽고 이해하기 쉬운 이름과 주소로 변환합니다.
IP 주소만 호스트가 알려진 경우 이 함수를 사용하여 호스트 이름 및 기타 네트워크 정보를 쿼리할 수 있습니다. 다음 정보가 포함된 목록을 반환합니다:
($name,$alias,$addrtype,$length,$address)
여기서 $name은 IP 주소에 해당하는 호스트 이름이고, $alias는 $name Alias에 해당하는 다른 이름이고, $addrtype은 네트워크 주소 유형, $length는
주소의 길이, $address입니다.
예:
$PackedAddress=pack("C4",$ IPAddr);
($name,$alias,$addrtype,$length,$address)
=gethostbyaddr($PackedAddress,2);
gethostbyname(NAME)은 위의 gethostbyaddr() 함수와 유사하지만 여기서는 호스트 이름이 매개변수로 사용됩니다.
예:
$Host="stuff.com";
($name,$alias,$addrtype,$length,$ address)
=gethostbyname($Host);
@IP =unpack("C4",$address[0]);
$HostIP=join(".",@IP);

이메일 비밀번호 확인 프로그램의 원본 코드
다음 코드는 두 개의 운영 체제 하에서 두 개의 POP3 서버 263.net 및 pop.netease.com에서 엄격하게 테스트되었으며 성공적인 것으로 입증되었습니다.
첫 번째 종류:
운영 체제: Windows98 중국어 버전
WWW 서버 : Apache1.3.9forWin
Perl 인터프리터: ActiveStateToolCorp's PerlforWin32, version5.005_03builtforMSWin32-x86-object
두 번째 유형:
운영 체제: RedHatlinux6.1
WWW 서버: Apache1.3.6forLinux
Perl 인터프리터: version5.005_03buildfori386-linux

#!/usr/bin/perl
#test.pl
#Authorhomepage:http://spot.126.com
usestrict;
useSocket;

my$pop3server="263.net";
my$port=110;

$|=1;
PRint"Content-type:text/ html

";
인쇄"POP3
";
인쇄 "
";


my($a,$name,$aliases, $proto,$type,$len,$thataddr,$thisaddr,$i);
my$AF_INET=2;
my$SOCK_STREAM=1;
my$sockaddr="Sna4x8";

($name,$aliases,$proto)=getprotobyname("tcp");
($name,$ aliases,$port)=getservbyname($port,"tcp")
$ port=~/^d $/;;
($name,$aliases,$type,$len,$thataddr)= gethostbyname($pop3server);

my$this=pack($sockaddr) ,$AF_INET,12345,$thisaddr);
my$that=pack($sockaddr,$AF_INET,$port,$thataddr );

my$mysocket=socket(S,$AF_INET,$ SOCK_STREAM,$proto);
if($mysocket)
{
}
else
{
print "소켓을 열 수 없습니다:$!";
exit(0) ;
}

my$mybind=bind(S,$this);
if($mybind )
{
}
else
{
print"바인딩할 수 없습니다! :$!";
exit(0);
}

my$myconnect=connect(S,$that);
if($myconnect)
{
}
else
{
print"연결 오류:$!";
exit(0);
}

my$BUF="";
my $SenderIP=recv(S,$BUF,596,0);
if($SenderIP)
{
}
else
{
print "수신 오류: $!" ;
exit(0);
}

if(substr($BUF,0,3)eq" OK")
{
}
else
{
인쇄"POP3 서버 오류!

";
exit(0);
}

my$BUFFER="USERzhangsan";
$BUFFER. =chr(13);
$BUFFER.=chr(10);

my$SENVAL=send(S,$BUFFER,0);
if($SENVAL)
{
}
else
{
print"전송 오류: $!";
exit(0);
}

my$BUF="";
my$SenderIP=recv(S,$BUF,4096,0);
if($SenderIP)
{
}
else
{
print"수신 오류: $!";
exit(0);
}

if(substr($BUF,0,3)eq" OK")
{
}
else
{
print"해당 계정이 없습니다!

";
exit(0);
}

$BUFFER="PASS12345678";
$BUFFER.=chr(13);
$BUFFER.=chr(10);


my$SENVAL=send(S,$BUFFER,0);
if($ SENVAL)
{
}
else
{
print "전송 오류: $!";
exit(0);
}

$BUF ="";
my$SenderIP=recv(S,$BUF,196,0);
if($SenderIP)
{
}
else
{
print "수신 오류: $!";
exit(0);
}

if(substr($BUF,0,3)eq" OK")
{
}
else
{
print "잘못된 비밀번호!";
exit(0);
}

print 비밀번호가 정확합니다!

위 내용은 Perl 언어를 이용한 소켓 프로그래밍 내용입니다. 더 많은 관련 글은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.