• 締切済み

サーバーの通信方式

IO::Socket モジュールを使用したスレッド方式と順次方式の2種類のHTTPサーバーを作ってます、そこで質問なのですが、調べても分かりやすいソースや解説の有るサイトが見つかりません、分かる方は教えていただけませんか? 一応仕様としては、サーバーを起動させてブラウザからコンピュータ内のファイルを閲覧するようにしたいと思っています。

  • Perl
  • 回答数1
  • ありがとう数0

みんなの回答

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.1

以下の本をお勧めします。 「Perlネットワークプログラミング」 作者はCGI.pmのリンカーン・スタインさんです。 この本でソケットプログラミング全てが解ります。 私が読んだ頃は翻訳が出ていませんでしたが、原本も 解りやすいです。

関連するQ&A

  • サーバークライアント方式について教えて下さい!

    サーバークライアント方式について述べた文で、適切で『ないもの』ってどれになりますか?  (1)全てのコンピューターが対等な立場で転送と受信の処理を行う  (2)クライアントはサーバーに要求を出し、サーバーはこれに応答する  (3)WebプラウザはWebサーバーのクライアントである  (4)ネットワーク上でサービスが提供される際の代表的な仕組みである (1)~(4)の中で、正解はどれになるのでしょうか? 解説も添えてもらえると助かります^^; 私なりに調べ、(3)が怪しいような気がしてます。。。 回答よろしくお願いします!

  • Tomcatはhttp serverは含んでいる

    Tomcatのwikipediaを読んでいたら 開発されたWebコンテナである。TomcatはWebサーバと連携して実行できるJavaコードの環境を提供するSunのJava ServletとJavaServer Pages (JSP)の仕様を実装している。Tomcatはそれ自身、HTTPサーバを内部に含んでいる。HTTPサーバと連携させて用いることもできる[5]。例えば、Apache HTTP Serverとはコネクタモジュールを用いて連携を行う。1.3系と2.0系ならばmod_jkなどを用い、2.2以降はmod_proxy_ajpモジュールを用いる。 と書いてありました。Tomcatはhttp serverも含んでいるということは、他のapacheなどのhttpサーバーと連携させるってどういうことでしょうか?Tomcatがhttpサーバーの機能を持っていたらわざわざ他のウェブサーバーを連携するという意義がわかりません。どういうことでしょうか?

    • ベストアンサー
    • Java
  • 処理終了後、他のプログラムへPOST方式でsubmitして、移動する方法

    処理終了後、他のプログラムへPOST方式でsubmitする方法はないでしょうか。 GET方式を使えば出来ますが、POST方式で値を渡したいのですが、可能でしょうか。 という質問があり、とても参考になりましたが、その後の処理がわかりません。 ユーザーが登録後、自分のサーバで処理終了し、 他のサーバーにある、パスワードとIDをPost方式で受け取るcgiへ引継ぎ、ログイン後の画面へ移行したいです。 そのプログラムは、GETでは、受け取れないようです。 LWPモジュールが使えないため、socketで、サーバ間の通信を考えていますが、どのようにして、ユーザーの接続を他のサーバ側に引き継いでよいのかわかりません。 お力をお貸しください。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • サーバの種類は?

    自宅でWindowsサーバを構築しようとして、色々調べています。 目的は、外出先からインターネット経由で、自宅サーバにあるファイル(txt,doc,etc..)を編集、閲覧することです。 なのですが、この目的のために構築するサーバの種類は、 FTPサーバで合ってるでしょうか? 解説サイトなどを読んでいると、「~~サーバを構築する」など 構築するサーバの種類別に解説されていたりするのですが、 ~~サーバを構築するべきなのかが分からず、質問しました。 ただ、FTPサーバはファイルを閲覧できても、編集ってできるのかな‥? という疑問もあったりします。 どうか詳しい方、ご教授お願いいたします。 よろしくおねがいします。

  • リクエストを受けたサーバ以外からのレスポンス

    質問なのですが、 1. ユーザがブラウザAからリクエストXを発行して 2. あるWebサーバBがリクエストXを受け付けて 3. WebサーバBがリクエストXの情報を、別のWebサーバCに渡して 4. WebサーバCがブラウザAへ直接レスポンスを返す。 というのはHTTPの仕様上では可能なのでしょうか? また、WebSocketやWebRTCなどを使えば可能でしょうか? ・WebサーバBとWebサーバCはIPアドレスが異なる前提でお願いします ・言語やフレームワークは無視して、仕様として可能かが知りたいです

  • CGIでのHTMLソース取得について

    現在CGIでのHTMLソース取得を考えています 色々と調べてみたのですがLWPやHTTP::Liteを使う方法が見つかりましたが 使用しているレンタルサーバーの仕様上それらのモジュールの使用が出来ないため 他の方法での取得ができないか考えています cronでの運用を考えているためなるべくcgiもしくはphpなどのサーバーサイドスクリプトで作りたいと考えています ご回答お願いします

    • ベストアンサー
    • CGI
  • 初歩的なソケット通信(java)

    初歩的なソケット通信(java) javaのソケット通信プログラムについて質問させて頂きます。まだまだ基礎の段階なのですが、詰まってしまたので、良かったら教えてください。 以下プログラムコード ------------------------------------- //サーバー側 import java.net.*; import java.io.*; public class Server { static int port = 12345; public static void main(String[] args) { try{ //サーバソケットの作成 ServerSocket ssoc = new ServerSocket(port); //メインループ while(true){ try{ System.out.println("クライアントからの接続を"+ port +"で待ちます"); Socket soc = ssoc.accept(); System.out.println(soc.getInetAddress().getHostName()+"から接続を受けました"); //処理をスレッドに任せます new Connect(soc); }catch(IOException e1){ e1.printStackTrace(); } } }catch(IOException e2){ e2.printStackTrace(); } } } class Connect extends Thread{ private Socket socket = null; public Connect(Socket socket){ this.socket = socket; //スレッド開始 this.start(); } public void run(){ try{ //出力ストリームを取得 OutputStream os = socket.getOutputStream(); PrintWriter out = new PrintWriter(os,true); //入力ストリームを取得 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader in = new BufferedReader(isr); String inputLine; while((inputLine = in.readLine()) != null){ //System.out.println(inputLine); out.println(inputLine); } System.out.println("処理が終わったので接続を切ります"); in.close(); out.close(); socket.close(); }catch(Exception e1){ try{ socket.close(); }catch(Exception e2){ e2.printStackTrace(); } } } }

  • ブラウザからのSSL通信の動きについて

    【環境】 ・Windows XP SP2 ・Microsoft Internet Explorer 6 6.0.2900.2180 HTTPS接続において、client helloが送出されないと考えられる事象が発生しています。 HTTPサーバの遅延が発生した為、サーバに接続しているスイッチでサーバへの全パケットを取得したところ、HTTP接続のパケットは確認出来るが、その後のSSL接続のclient helloがクライアントより送付されない事象が確認できました。 HTTPサーバのログを確認すると、ほとんどのスレッドがSSL client hello待ちでWaitしている状態です。Wait中なので、遅延が発生している間、サーバCPUは、ほぼ0%の状態です。 サーバ側でSSL client helloがタイムアウトするまでWebサーバ遅延が持続する状況です。 通常、https://リンクをクリックした時点で、HTTPプロトコルのconnectが始まると同時に、SSL client helloパケットがクライアントから送付されると考えています。 送付されないのはブラウザのバグでしょうか? Internet Explorer6のバグ情報を探ってみたが、該当すると思われる情報は見つけられませんでした。一般的なブラウザでこのようなバグが発覚せずに使われているのも信じがたいです。 【1】.一般的にクライアントのブラウザから、SSL client helloパケットが送付されるトリガーは何でしょうか。 (https://のアドレスをクリックする事かと考えてます。) 【2】.ブラウザの不具合によるSSLclient helloが送付されない事象をご存知ないでしょうか。 【3】.その他にSSLclient helloが送付されない原因として思い当たる事はないでしょうか 以上、よろしくお願いします。

  • UDPサーバのスレッド化

    JavaでUDPのサーバを作っているのですが、スレッド化ができません。] 以下の二つがキーワードだと思うのですが、どうかいていけばいいのかわかりません。お分かりになる方ご教授お願いいたします。 public class c_udp_server extends public void run() //サーバソース import java.io.*; import java.net.*; public class c_udp_server { public static void main(String args[]){ int port = 8000; BufferedInputStream biStream; InetAddress clientAddress; int clientPort; byte buf[]= new byte[160*120*3]; DatagramPacket sendPacket = new DatagramPacket(buf,buf.length); byte req[] = new byte[32]; DatagramPacket receivePacket = new DatagramPacket(req,req.length); try { DatagramSocket socket = new DatagramSocket(port); System.out.println("Running..."); while(true){ socket.receive(receivePacket); clientAddress = receivePacket.getAddress(); clientPort = receivePacket.getPort(); socket.send(receivePacket); sendPacket.setAddress(clientAddress); sendPacket.setPort(clientPort); sendPacket.setLength(160*120*3); biStream = new BufferedInputStream(new FileInputStream(s.raw)); for(;;){ biStream.read(buf,0,160*120*3); socket.send(sendPacket); if(buf[0] < 0)break; } biStream.close(); } } catch(Exception e){ System.out.println("Exception :" + e); } } } 環境 Windows XP Pro java version "1.5.0_10"

  • HTTPクライアントでのソースIPについて

    よろしくお願いします。 私の持っているサーバは複数のIPアドレスを持っています。 そのIPアドレスを毎回変えながら別のHTTPサーバにアクセスするプログラムを作ろうとしています。 PHPのfsockopen()にはそのような引数は無いようです。 Cで書こうとしたところ、sys/socket.hの構造体を見ても、ソースIPを設定する変数を見つけることができませんでした。 JAVAでも http://forums.sun.com/thread.jspa?threadID=655481&messageID=3853311 のような書き込みはありましたが、結局解決法は出ていないようです。 平行して本でも調べていますが、何かヒントや使うべきライブラリ、方向性などありましたら教えて頂けると大変ありがたく思います。

専門家に質問してみよう