どうもこんにちは。
この前の質問は補足しようと思いサブアカウントを作成したら
利用規約に引っかかったみたいで削除されてしまいました。
自分が何も知らないばかりに回答者の方々には不快な思いをさせてしまったことをお詫びします。
本題ですが、
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を今は使っていますが、
将来的には個人のサーバー(独自ドメインの)で動かすことになると思います。
No.2ベストアンサー
- 回答日時:
実際にやってみたこともないしPythonは門外漢ですが普通に考えると
CGIっていうのはWebサーバの持つユーザ権限で通常のプログラムを実行して、実行結果を標準出力でブラウザに橋渡しするだけの仕組みなので、普通のソケットを利用したプログラムでも単体動作するものなら動作はすると思います。
ただ、深く追ってはいませんがサンプルのプログラムをざっと見る限りサーバとしてのプロセスを発生させようとしているのでこれは無理かと思います。
なぜなら、CGIで呼び出されるプロセスはWebサーバの子として呼ばれるためWebサーバの設定であらかじめタイムアウトの時間が設定されているからです。
たとえばApacheならデフォルトで300秒が設定されますので5分たてば切り捨てられます。
サーバ機能と兼任するようなプロセスはシステム上で実行させる以外ないと思います。
クライアント機能のみで短時間で処理が終了するものならOKかと思います。
この手のプログラムはJavaアプレットでならできるかもしれません(昔チャット用のクライアントサーバをブラウザ上で動かすものを作りましたが、CGIではありません)
ありがとうございました。
CGIの方でsocketやる方法も有るには有るようなのですが、
自分には理解出来ませんし(普通のプログラム(実行ファイル)の様な書き方しか分かりませんし)、
今回はexeが使用可となったので普通の実行ファイルの方で作成していくことにしました。
ありがとうございました。
No.1
- 回答日時:
CGIとPythonスクリプトは別な概念です。
このスクリプトは、CGIとして間違っている(HTTPヘッダが無い)ので、CGIとして動作させてもエラーになります。
また、while(True)で待ちを入れているようですが、こういうのもCGIではエラー(タイムアウト)の原因となります。
こういうものは、単独で実行させるものではないでしょうか?
CGIでやるにしても、制御用CGIを作ってブラウザから開始/停止させるとかです。
@pagesでそれができるかはわかりません。
レンタルサーバーでは、単独のプログラム実行を禁止していることがあります。
回答有難うございます。
このままのpythonスクリプトは動かせないのは理解しています。
ですがソケット通信をしたいのです。
以前perlかPHPでソケット通信をするスクリプトを見ました。
pythonでソケット通信自体は可能なのでしょうか?
もちろんcgiでの話です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- その他(開発・運用・管理) Windows serverでマルチキャスト通信の確認をしたいです。MicrosoftよりMPING 1 2023/03/31 01:05
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- サーバー お名前ドットコムの共用サーバー 送信済みメールをサーバーから削除できるか? 2 2023/03/01 10:44
- ネットワーク 自作のサーバーPCが自宅内のネットワークに接続できない 3 2023/01/24 16:58
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlによる外部プログラムの実行
-
EXCELファイルに誰がアクセスし...
-
URLに~/cgi-bin/~を隠す方法
-
《エクセルVBA》「他の人が該当...
-
CGIを覗かれないように
-
歌詞画ってどうやって作るの?
-
カタカナを英語やフランス語に...
-
自前のアップローダの作り方
-
CGIの予約状況システムについて
-
サイトからCGIをダウンロー...
-
CGI設定の初歩的な質問
-
分かりません。誰か教えて
-
WEB PATIOが表示されない
-
IE5.0でアプリケーションエラー
-
属性値を変えられないのはなぜ...
-
ウェブサイトのカウンター
-
TSVデータを上書きしたい
-
perlからJavascriptを起動
-
cgi内から別のcgiを呼び出す。
-
エラーで困っています。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CGIって何ですか?簡潔に教えて...
-
Perlプログラム上でアラートを表示
-
Webからアクセスし、画面のボタ...
-
IISでエラー、Apachでは動くの...
-
実行可能な外部コマンドは?
-
ホームページにCGIを設置したの...
-
IIS5.1でCGI Timeoutになる原因...
-
CGI経由で起動したプロセスが停...
-
CGIファイルへのブラウザからの...
-
毎日同時刻に、設定しておいた...
-
前回はごめんなさい。pythonでc...
-
CGIからのプログラム起動
-
cgi を定期的に自動実行
-
cgiで呼び出したプログラムを数...
-
ログアウト処理でWebブラウザを...
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
SFTPなどは使わないホームペー...
-
VBAでサーバーにアクセスするに...
-
URLに~/cgi-bin/~を隠す方法
おすすめ情報