標籤:style os 使用 io for 檔案 sp on size
soket是網路通訊端,它是ip地址和連接埠號碼的組合。在perl中使用通訊端需要SOCKET模組;以經過測試可以使用:下面使用如下的例子進行說明:
伺服器端:
#!/usr/bin/perl -w
use Socket;
use IO::Handle;
socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname("tcp"));#初始化socket
setsockopt(SOCK,SOL_SOCKET,SO_REUSEADDR,1);
my $addr=sockaddr_in(3000,INADDR_ANY);
bind(SOCK,$addr);#綁定地址
listen(SOCK,SOMAXCONN);#監聽
while(1)
{
print "wait for a connect\n";
while(1){
last if my $addr1=accept(S,SOCK);#接收串連
}
print "connected\n";
S->autoflush(1);#內容不會放入緩衝直接就可以輸出
while(1){
next unless $msg_in=<S>;#使用通訊端的描述符和檔案描述符一樣,這樣相對於c的socket就更加方便了,當然也可以使用send, recv等函數。注意接收到的內容結尾處已經包含分行符號。
last if($msg_in=~ /quit/i || $msg_in =~ /q/i);
print "$msg_in";
print S "send back: $msg_in";
}
}
close S;
close SOCK;
用戶端:
#!/usr/bin/perl -w
use Socket;
use IO::Handle;
socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname("tcp"));
my $addr=sockaddr_in(3000,inet_aton("localhost"));
connect(SOCK,$addr);
SOCK->autoflush(1);
while(1){
print "send msg:\n";
$in=<STDIN>;#已經包含結束符了
if($in =~ /quit/i || $in =~ /q/i)
{
print SOCK "$in";
print "bye\n";
exit 1;
}
else
{
print SOCK "$in";
$hh=<SOCK>;
print "recieve massage from server: $hh";
}
}
perl socket編程