プロが教えるわが家の防犯対策術!

どうもこんにちは。
この前の質問は補足しようと思いサブアカウントを作成したら
利用規約に引っかかったみたいで削除されてしまいました。
自分が何も知らないばかりに回答者の方々には不快な思いをさせてしまったことをお詫びします。

本題ですが、
pythonのプログラムをサーバーで動かそうと思って、
.cgiのファイルを作成しました。
そして、httpの形にして文字を表示することは出来たのですが、
本当にしたいのはソケット通信なんです。

自分のPCでのソケット通信(サーバー&クライアント)はできますし、
cgiも簡単なものなら動くようになりました。
が、cgiでソケット通信ができません。
httpのリクエストでgetしろよ。と思うかもしれませんが、
ソケット通信じゃないとダメなんです。
無理なら諦めますが、出来るならやり方を教えて下さい。

自分のPCでのソケット通信のプログラムは以下のものとなります。
#!/usr/local/bin/python
#coding: utf-8

import socket
import time

host = "localhost"
port = 50000
data = "HOST:"+host+"\nPort:"+str(port)
port = int(port)


print ("python socket server")
print (data)

while(True):
print ("wait...\n")
sock_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock_server.bind((host, port))
sock_server.listen(1)

connect, addr = sock_server.accept()

print ("Connect...\naddress:", addr)

while(True):
mes = connect.recv(1024)
if not mes : break
print ("Getmessage:", mes)
connect.send("server message")
print ("send message:server message")
sock_server.close()

これをサーバーに移そうと思うとこのままですとlocalhostでエラーが出ます。
なのでこれをgethostnameやgethostbynameにしようとすると、
こりゃまたエラーが出てしまいます。

どうしたら出来るのでしょうか??
サーバーは@pagesを今は使っていますが、
将来的には個人のサーバー(独自ドメインの)で動かすことになると思います。

A 回答 (2件)

実際にやってみたこともないしPythonは門外漢ですが普通に考えると


CGIっていうのはWebサーバの持つユーザ権限で通常のプログラムを実行して、実行結果を標準出力でブラウザに橋渡しするだけの仕組みなので、普通のソケットを利用したプログラムでも単体動作するものなら動作はすると思います。
ただ、深く追ってはいませんがサンプルのプログラムをざっと見る限りサーバとしてのプロセスを発生させようとしているのでこれは無理かと思います。
なぜなら、CGIで呼び出されるプロセスはWebサーバの子として呼ばれるためWebサーバの設定であらかじめタイムアウトの時間が設定されているからです。
たとえばApacheならデフォルトで300秒が設定されますので5分たてば切り捨てられます。
サーバ機能と兼任するようなプロセスはシステム上で実行させる以外ないと思います。
クライアント機能のみで短時間で処理が終了するものならOKかと思います。
この手のプログラムはJavaアプレットでならできるかもしれません(昔チャット用のクライアントサーバをブラウザ上で動かすものを作りましたが、CGIではありません)
    • good
    • 0
この回答へのお礼

ありがとうございました。
CGIの方でsocketやる方法も有るには有るようなのですが、
自分には理解出来ませんし(普通のプログラム(実行ファイル)の様な書き方しか分かりませんし)、
今回はexeが使用可となったので普通の実行ファイルの方で作成していくことにしました。
ありがとうございました。

お礼日時:2013/07/30 11:11

CGIとPythonスクリプトは別な概念です。


このスクリプトは、CGIとして間違っている(HTTPヘッダが無い)ので、CGIとして動作させてもエラーになります。
また、while(True)で待ちを入れているようですが、こういうのもCGIではエラー(タイムアウト)の原因となります。

こういうものは、単独で実行させるものではないでしょうか?
CGIでやるにしても、制御用CGIを作ってブラウザから開始/停止させるとかです。

@pagesでそれができるかはわかりません。
レンタルサーバーでは、単独のプログラム実行を禁止していることがあります。
    • good
    • 0
この回答へのお礼

回答有難うございます。
このままのpythonスクリプトは動かせないのは理解しています。
ですがソケット通信をしたいのです。
以前perlかPHPでソケット通信をするスクリプトを見ました。
pythonでソケット通信自体は可能なのでしょうか?
もちろんcgiでの話です。

お礼日時:2013/07/15 15:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!