ためしましたがOK返ります
ちなみに自サーバー上のWebクライアントから実行するとNATの関係でERRORになりますよ
#!/usr/local/bin/perl
$host=’205.188.234.66’;
$addr = (gethostbyname($host))[4];
$file = ’/’;
$name = pack(”S n a4 x8”, 2,8010, $addr);
socket(S, 2, 1, 0);
$afx=connect(S, $name);
close(S);
print qq(Content-type: text/html¥n¥n);
print ”<html><body>¥n”;
if($afx == 1){
print ”OK”;
}
else{
print ”error”;
}
print ”</body><html>¥n”;
exit;
http://www.kent-web.com/www/index.html
自宅マシンWWWサーバ化計画
ご利用のレンタルサーバによっては、セキュリティの関係上、Socket 通信で外部サーバとのやり取りを禁止している場合もあります。
その場合はサーバ上で動作させる事は出来ません。
ローカルで CGI が実行出来る環境を用意して動作させるのがベストかと思います。
なるほど、ありがとうございます。Socket通信が許可されているかどうかを調べる方法はありますでしょうか。
う〜ん・・・レンタルサーバからのアクセスを許可していないPortがあったりしますからね
Scriptが動かないのではなくて、「ERROR」の分岐に飛ぶのであれば、その可能性が高いです
ShoutCastサーバのPortとScriptのポートを変えてみると動作するかもしれません
安いレンタルサーバだとサーバからのネットワークコマンド(xterm/rsh/rlogin/telnet/sendmailなど)自体を許可していないところもありますからね・・・こうなるとPERLから直接確認するのは絶望的です
Perlでなくて良いのなら、C++Builderなどで20行程度のプログラムでサーバチェックするソフト作れなくもないですが(^^;
bool con=false;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ClientSocket1->Host=Edit1->Text;
ClientSocket1->Port=StrToIntDef(Edit2->Text,8000);
con=false;
ClientSocket1->Open();
}
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
con=true;
Socket->Close();
ShowMessage(”放送中”);
}
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
con=false;
ShowMessage(”お休み”);
}
細かに回答していただきありがとうございます。sendmailも使えるホスティングです。Cのbinaryも置くことができる比較的自由なサーバーですが、Socket通信が可能かどうか確認する方法はありますでしょうか。
ありがとうございます。たしかに「参考URL」は稼動していますね。私のサーバーは、NATないではなくレンタルサーバーですが、上記のソースがやはり動きません。変更点は一点だけでPerlのロケーションが/usr/bin/perlになっているだけなのですが。環境で確認することはありますか?