ネットワークのプログラムのプロトコルについて(java)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic

ネットワークのプログラムのプロトコルについて(java)

#1

投稿記事 by dic » 15年前

javaですいません
プログラムのネットワークプロトコルについて質問します

下のように URLConnections クラスと sockets クラスでは使用してるプロトコルが違うのか
googleからの反応が異なります
URLConnections クラスは反応を示さず
sockets クラスは読み込めます
そこで、図のように、URLConnectionsクラスとsocketsクラスが使用している
TCP/IP階層図では URLConnectionsクラスとsocketsクラスはどの階層に該当するのでしょうか?

import java.io.*;
import java.net.*;
import java.util.Date;


//================================================================================
class URLConnections
{
    public URLConnections()
    {
        try{
            int    character;
            URL    url = new URL( "http://www.google.co.jp" );
            URLConnection    urlconnection = url.openConnection();
            
            int    contentlength = urlconnection.getContentLength();
            if( contentlength > 0 )
            {
                InputStream in = urlconnection.getInputStream();
                
                while( (character = in.read() ) != -1 )
                {
                    System.out.print( (char)character );
                }
            }
        }catch(Exception e)
        {
            System.out.println( "URLConnections で例外発生");
        }
        
    }
}

//================================================================================
class    sockets
{
    public    sockets()
    {
        try {
            System.out.println( "socket start" );
            Socket s = new Socket( "www.google.co.jp", 80 );

            BufferedReader in = new BufferedReader( new InputStreamReader( s.getInputStream() ) );
            PrintWriter out = new PrintWriter( s.getOutputStream() );

            out.print( "GET /index.html\n\n" );
            out.flush();

            String line;
            while( (line=in.readLine())!= null ){
                System.out.println( line );
            }
            System.out.println( "socket end" );
        }catch(Exception e)
        {
            System.out.println( "例外発生" );
        }
    }
}


//================================================================================
public class app {
    public static void main( String[/url] args)
    {
        URLConnections    u = new URLConnections();
        System.out.println( "end1\n" );
        
        sockets    s = new sockets();
        System.out.println( "end2\n" );
    }

}

相互リンクさせてもらいます
http://oshiete.goo.ne.jp/qa/6105408.htmlt=

ISLe

Re:ネットワークのプログラムのプロトコルについて(java)

#2

投稿記事 by ISLe » 15年前

URLConnectionクラス→アプリケーション層
URL文字列の先頭でアプリケーションプロトコルを指定します("http:"とか)。
TCP/IPの上位層です。

Socketクラス→トランスポート層
TCP/IPで接続します。

dic

Re:ネットワークのプログラムのプロトコルについて(java)

#3

投稿記事 by dic » 15年前

ISLeさん
回答ありがとうございます

指定したプロトコルで返ってくる内容が違うというのは上の例ですと
googleはトランスポート層で通信しないと、データが返ってこないということでしょうか?
会社にもよると思いますが、これはそのサーバの設定次第ということでしょうか?

通信できるサーバと通信できないサーバがありまして
混乱している状態です

というより、ネットワーク関連の知識も身に付けたいと思います
(javaかPHPか・・・悩みます)

ISLe

Re:ネットワークのプログラムのプロトコルについて(java)

#4

投稿記事 by ISLe » 15年前

URLConnectionsクラスが何も出力しないのは、getContentLengthで-1が返ってくるせいです。
Content-Lengthヘッダは必ず与えられるとは限りませんので無条件に読み込めなくなるまで読み込んでください。

URLConnectionsクラスが出力するのはいわゆるブラウザに表示されるHTMLです。

socketsクラスはhttpのプロトコル文字列も含めて生のデータが出力されます。

閉鎖

“C言語何でも質問掲示板” へ戻る