📄 sockets.mht
字号:
color=3D#cdcd00>2</FONT>_<FONT color=3D#cdcd00>208</FONT>_<FONT =
color=3D#cdcd00>988</FONT>_<FONT color=3D#cdcd00>800</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>socket</FONT><FONT color=3D#00ffff>(</FONT>MsgBox, =
PF_INET, SOCK_DGRAM, <FONT color=3D#98fb98>getprotobyname</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#00cd00>"udp"</FONT><FONT =
color=3D#00ffff>))</FONT>
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
<FONT color=3D#00cd00>"socket: $!"</FONT><FONT color=3D#00ffff>;</FONT>
$him =3D sockaddr_in<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#ff7f50>scalar</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#98fb98>getservbyname</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"time"</FONT>, <FONT color=3D#00cd00>"udp"</FONT><FONT =
color=3D#00ffff>))</FONT>,<FONT color=3D#43cd80> </FONT>
inet_aton<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#ff7f50>shift</FONT> || <FONT =
color=3D#00cd00>'127.1'</FONT><FONT color=3D#00ffff>));</FONT>
<FONT color=3D#ff7f50>defined</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#98fb98>send</FONT><FONT color=3D#00ffff>(</FONT>MsgBox, <FONT =
color=3D#cdcd00>0</FONT>, <FONT color=3D#cdcd00>0</FONT>, $him<FONT =
color=3D#00ffff>))</FONT>
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
<FONT color=3D#00cd00>"send: $!"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>defined</FONT><FONT color=3D#00ffff>(</FONT>$src =
=3D <FONT color=3D#98fb98>recv</FONT><FONT =
color=3D#00ffff>(</FONT>MsgBox, $ptime, <FONT color=3D#cdcd00>4</FONT>, =
<FONT color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>))</FONT>
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
<FONT color=3D#00cd00>"recv: $!"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>(</FONT>$port, $ipaddr<FONT =
color=3D#00ffff>)</FONT> =3D sockaddr_in<FONT =
color=3D#00ffff>(</FONT>$src<FONT color=3D#00ffff>);</FONT>
$host =3D <FONT color=3D#98fb98>gethostbyaddr</FONT><FONT =
color=3D#00ffff>(</FONT>$ipaddr, AF_INET<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$delta</FONT> =3D =
<FONT color=3D#00ffff>(</FONT><FONT color=3D#98fb98>unpack</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#00cd00>"N"</FONT>, $ptime<FONT =
color=3D#00ffff>)</FONT> - $SECS_of_<FONT =
color=3D#cdcd00>70</FONT>_YEARS<FONT color=3D#00ffff>)</FONT> - <FONT =
color=3D#98fb98>time</FONT><FONT color=3D#00ffff>();</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"Clock on $host =
is $delta seconds ahead of this one.\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN934>Setting Up a UDP Server</A></H2>
<TABLE width=3D"100%" bgColor=3D#2f4f4f border=3D0>
<TBODY>
<TR>
<TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IO::Socket</FONT><FONT color=3D#00ffff>;</FONT>
$server =3D IO::Socket::INET->new<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>LocalPort</FONT> =3D> $server_port,
<FONT color=3D#00cd00>Proto</FONT> =
=3D> <FONT color=3D#00cd00>"udp"</FONT><FONT color=3D#00ffff>)</FONT>
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
<FONT color=3D#00cd00>"Couldn't be a udp server on port $server_port : =
$@\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>while</FONT> <FONT =
color=3D#00ffff>(</FONT>$him =3D $server-><FONT =
color=3D#98fb98>recv</FONT><FONT color=3D#00ffff>(</FONT>$datagram, =
$MAX_TO_READ, $flags<FONT color=3D#00ffff>))</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#bebebe># do something
</FONT><FONT color=3D#00ffff>}</FONT><FONT color=3D#43cd80> </FONT>
<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch17/udpqofd">download =
the following standalone program</A></FONT>
#!/usr/bin/perl -w
# udpqotd - UDP message server
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>strict</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IO::Socket</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>my</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$sock</FONT>, <FONT color=3D#9ac0cd>$oldmsg</FONT>, =
<FONT color=3D#9ac0cd>$newmsg</FONT>, <FONT =
color=3D#9ac0cd>$hisaddr</FONT>, <FONT color=3D#9ac0cd>$hishost</FONT>, =
<FONT color=3D#9ac0cd>$MAXLEN</FONT>, <FONT =
color=3D#9ac0cd>$PORTNO</FONT><FONT color=3D#00ffff>);</FONT>
$MAXLEN =3D <FONT color=3D#cdcd00>1024</FONT><FONT =
color=3D#00ffff>;</FONT>
$PORTNO =3D <FONT color=3D#cdcd00>5151</FONT><FONT =
color=3D#00ffff>;</FONT>
$sock =3D IO::Socket::INET->new<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>LocalPort</FONT> =3D> $PORTNO, <FONT =
color=3D#00cd00>Proto</FONT> =3D> <FONT =
color=3D#00cd00>'udp'</FONT><FONT color=3D#00ffff>)</FONT>
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
<FONT color=3D#00cd00>"socket: $@"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"Awaiting UDP =
messages on port $PORTNO\n"</FONT><FONT color=3D#00ffff>;</FONT>
$oldmsg =3D <FONT color=3D#00cd00>"This is the starting =
message."</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>while</FONT> <FONT =
color=3D#00ffff>(</FONT>$sock-><FONT color=3D#98fb98>recv</FONT><FONT =
color=3D#00ffff>(</FONT>$newmsg, $MAXLEN<FONT color=3D#00ffff>))</FONT> =
<FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>my</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$port</FONT>, <FONT color=3D#9ac0cd>$ipaddr</FONT><FONT =
color=3D#00ffff>)</FONT> =3D sockaddr_in<FONT =
color=3D#00ffff>(</FONT>$sock->peername<FONT =
color=3D#00ffff>);</FONT>
$hishost =3D <FONT color=3D#98fb98>gethostbyaddr</FONT><FONT =
color=3D#00ffff>(</FONT>$ipaddr, AF_INET<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"Client =
$hishost said ``$newmsg''\n"</FONT><FONT color=3D#00ffff>;</FONT>
$sock-><FONT color=3D#98fb98>send</FONT><FONT =
color=3D#00ffff>(</FONT>$oldmsg<FONT color=3D#00ffff>);</FONT>
$oldmsg =3D <FONT color=3D#00cd00>"[$hishost] $newmsg"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT><FONT color=3D#43cd80> </FONT>
<FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"recv: =
$!"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch17/udpmsg">download =
the following standalone program</A></FONT>
#!/usr/bin/perl -w
# udpmsg - send a message to the udpquotd server
</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IO::Socket</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>strict</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>my</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$sock</FONT>, <FONT color=3D#9ac0cd>$server_host</FONT>, =
<FONT color=3D#9ac0cd>$msg</FONT>, <FONT color=3D#9ac0cd>$port</FONT>, =
<FONT color=3D#9ac0cd>$ipaddr</FONT>, <FONT =
color=3D#9ac0cd>$hishost</FONT>,<FONT color=3D#43cd80> </FONT>
$MAXLEN, $PORTNO, $TIMEOUT<FONT color=3D#00ffff>);</FONT>
$MAXLEN =3D <FONT color=3D#cdcd00>1024</FONT><FONT =
color=3D#00ffff>;</FONT>
$PORTNO =3D <FONT color=3D#cdcd00>5151</FONT><FONT =
color=3D#00ffff>;</FONT>
$TIMEOUT =3D <FONT color=3D#cdcd00>5</FONT><FONT =
color=3D#00ffff>;</FONT>
$server_host =3D <FONT color=3D#ff7f50>shift</FONT><FONT =
color=3D#00ffff>;</FONT>
$msg =3D <FONT color=3D#00cd00>"</FONT><FONT =
color=3D#cdad00>@ARGV</FONT><FONT color=3D#00cd00>"</FONT><FONT =
color=3D#00ffff>;</FONT>
$sock =3D IO::Socket::INET->new<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>Proto</FONT> =3D> <FONT =
color=3D#00cd00>'udp'</FONT>,
<FONT color=3D#00cd00>PeerPort</FONT> =
=3D> $PORTNO,
<FONT color=3D#00cd00>PeerAddr</FONT> =
=3D> $server_host<FONT color=3D#00ffff>)</FONT>
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
<FONT color=3D#00cd00>"Creating socket: $!\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
$sock-><FONT color=3D#98fb98>send</FONT><FONT =
color=3D#00ffff>(</FONT>$msg<FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> <FONT =
color=3D#00cd00>"send: $!"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>eval</FONT> <FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>local</FONT> <FONT =
color=3D#cdcd00>$SIG</FONT><FONT color=3D#00ffff>{</FONT><FONT =
color=3D#00cd00>ALRM</FONT><FONT color=3D#00ffff>}</FONT> =3D <FONT =
color=3D#ffa500>sub</FONT> <FONT color=3D#00ffff>{</FONT> <FONT =
color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"alarm time out"</FONT> =
<FONT color=3D#00ffff>};</FONT>
<FONT color=3D#98fb98>alarm</FONT> $TIMEOUT<FONT =
color=3D#00ffff>;</FONT>
$sock-><FONT color=3D#98fb98>recv</FONT><FONT =
color=3D#00ffff>(</FONT>$msg, $MAXLEN<FONT color=3D#00ffff>)</FONT> =
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> <FONT =
color=3D#00cd00>"recv: $!"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>alarm</FONT> <FONT =
color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>;</FONT> <FONT =
color=3D#bebebe># return value from eval on normalcy
</FONT><FONT color=3D#00ffff>}</FONT> <FONT color=3D#98fb98>or</FONT> =
<FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"recv from =
$server_host timed out after $TIMEOUT seconds.\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>(</FONT>$port, $ipaddr<FONT =
color=3D#00ffff>)</FONT> =3D sockaddr_in<FONT =
color=3D#00ffff>(</FONT>$sock->peername<FONT =
color=3D#00ffff>);</FONT>
$hishost =3D <FONT color=3D#98fb98>gethostbyaddr</FONT><FONT =
color=3D#00ffff>(</FONT>$ipaddr, AF_INET<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"Server =
$hishost responded ``$msg''\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN937>Using UNIX Domain Sockets</A></H2>
<TABLE width=3D"100%" bgColor=3D#2f4f4f border=3D0>
<TBODY>
<TR>
<TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IO::Socket</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>unlink</FONT> <FONT =
color=3D#00cd00>"/tmp/mysock"</FONT><FONT color=3D#00ffff>;</FONT>
$server =3D IO::Socket::UNIX->new<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>Local</FONT> =3D> <FONT =
color=3D#00cd00>"/tmp/mysock"</FONT>,
<FONT color=3D#00cd00>Type</FONT> =
=3D> SOCK_DGRAM,
<FONT color=3D#00cd00>Listen</FONT> =
=3D> <FONT color=3D#cdcd00>5</FONT> <FONT color=3D#00ffff>)</FONT>
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
$@<FONT color=3D#00ffff>;</FONT>
$client =3D IO::Socket::UNIX->new<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>Peer</FONT> =3D> <FONT =
color=3D#00cd00>"/tmp/mysock"</FONT>,
<FONT color=3D#00cd00>Type</FONT> =
=3D> SOCK_DGRAM,
<FONT color=3D#00cd00>Timeout</FONT> =
=3D> <FONT color=3D#cdcd00>10</FONT> <FONT color=3D#00ffff>)</FONT>
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
$@<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>Socket</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#43cd80> </FONT>
<FONT color=3D#98fb98>socket</FONT><FONT color=3D#00ffff>(</FONT>SERVER, =
PF_UNIX, SOCK_STREAM, <FONT color=3D#cdcd00>0</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#98fb98>unlink</FONT> <FONT =
color=3D#00cd00>"/tmp/mysock"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>bind</FONT><FONT color=3D#00ffff>(</FONT>SERVER, =
sockaddr_un<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"/tmp/mysock"</FONT><FONT color=3D#00ffff>))</FONT>
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
<FONT color=3D#00cd00>"Can't create server: $!"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>socket</FONT><FONT color=3D#00ffff>(</FONT>CLIENT, =
PF_UNIX, SOCK_STREAM, <FONT color=3D#cdcd00>0</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#98fb98>connect</FONT><FONT =
color=3D#00ffff>(</FONT>CLIENT, sockaddr_un<FONT =
color=3D#00ffff>(</FONT><FONT color=3D#00cd00>"/tmp/mysock"</FONT><FONT =
color=3D#00ffff>))</FONT>
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -