win版Perlでソケットを使うには?
[上に]
[前に]
[次に]
フィニム
1999/03/29(月) 01:35:45
最近Perl始めたフィニムと申します。
windowsでPerlを動かしてるのですが、
ソケットのライブラリィを読み込んでも、
ソケット作成及びファイルのDL等が出来ません。
何か、設定などが必要なのでしょうか?
(unixの某無料サーバーでは動きましたけれども?)
匿名希望
1999/03/29(月) 02:04:58
別にないと思います。
Perl for Win32,Active Perlでは問題無くソケット通信しています。
JPERLは・・・・知りません。
匿名希望
1999/03/29(月) 02:07:01
あ、勿論Socketは、自分でsocketして、connectして、..etc
やってますので、一纏めになったライブラリとか使っての
設定は知りません。
フィニム
1999/03/29(月) 03:02:51
> ソケットのライブラリィを読み込んでも、
っていうのは、「use Socket;」の事です。
もちろん、socketしてconnectして、使っています。
コルン
[E-Mail]
[HomePage]
1999/03/29(月) 03:41:15
それたぶんね、UNIXでは\r\nでメッセージを送ってるのを、Winでもそのままにしてるからじゃ無いの?
Winだと、\r\r\nに展開されちゃうんだけど...?
追伸: ここで会ったが百年目。後でGAIAおいで。>フィニム
いいづか
[E-Mail]
[HomePage]
1999/03/30(火) 00:33:59
Win95+Perl5+An httpdでは、socketへの\r\n は \r\nとして
送出されるような感じでした。
Perlのソケットって、どうもマシンにより
同じスクリプトでもうまく動く場合とそうでない場合が
あるみたいです(もちろん両方ともPerl5の場合で)。
とほほページの例はちょっと動かないケースが若干ある
かもしれません(Solaris5 on Sparcではうまくいかなかった
です)。
参考までに、「比較的いろいろなマシンで動作確認をした
connect用のプロシジャ」を記載しておきます(Perl5 Manual
のパクリ)のでご利用ください。なお、コピーしたら
2バイト文字スペースを全部1バイト文字スペースに置換えて
ください。
#
# usage:
# &connect_to_remote_host($target_host_name,$port_number)
# Global variables : S(file handle of socket)
# return values:1=succeeded,0=error
sub connect_to_remote_host {
local($them) = $_[0];
local($port) = $_[1];
local($sockaddr) = 'S n a4 x8';
$hostname = 'localhost';
($name, $aliases, $proto) = getprotobyname('tcp');
($name, $aliases, $port) = getservbyname($port, 'tcp') unless $port =~ /^\d+$/;
($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname);
($name, $aliases, $type, $len, $thataddr) = gethostbyname($them);
$this = pack($sockaddr, &AF_INET, 0, $thisaddr);
$that = pack($sockaddr, &AF_INET, $port, $thataddr);
socket(S, &PF_INET, &SOCK_STREAM, $proto) || do { return (0);};
bind(S, $this) || do { return ( 0 ); };
connect(S, $that) || do {close ( S ); return ( 0 ); };
# change S to non-brocking mode
select(S); $| = 1; select(stdout);
return ( 1 );
}
いいづか
[E-Mail]
[HomePage]
1999/03/30(火) 00:39:08
補足&宣伝です。
私のホームページに「SMTPサーバと会話をするPerl製CGI」が
あり、Win95では動作確認をしてあります。もしかすると
参考になる部分もあるかもしれません。
あと、一旦開いたソケットに対しては
$variable = <FILE_HANDLE_OF_SOCKET>;
とか
print FILE_HANDLE_OF_SOCKET "data to write into socket\r\n";
で大丈夫です。また、shutdown()は腐っているかも知れません
(もしくは僕のスクリプトが腐っているのかな?)
[上に]
[前に]
[次に]