Javaベース--ネットワークプログラミング02(URL)


URLクラス
  • 類のURLは、インターネットの「リソース」を指すポインタである統一リソースロケータを表しています。
  • コンストラクタ
  • URL(String spec);String表示形式に基づいてURLオブジェクトを作成する。
  • URL(String protocal、String host、int port、String file)指定されたprotocal、host、prot番号とfileに基づいてURLオブジェクトを作成します。
  • import java.net.*;
    class URLDemo 
    {
        public static void main(String[] args) throws MalformedURLException
        {
            URL url = new URL("http://192.168.1.254/myweb/demo.html?name=haha&age=30");
            System.out.println("getProtocol() :"+url.getProtocol());
            System.out.println("getHost() :"+url.getHost());
            System.out.println("getPort() :"+url.getPort());
            System.out.println("getPath() :"+url.getPath());
            System.out.println("getFile() :"+url.getFile());
            System.out.println("getQuery() :"+url.getQuery());
    
            /*int port = getPort();
            if(port==-1)
                port = 80;
    
            getPort()==-1
            */
        }
    }
  • 一般的な方法:
  • get File()このURLのファイル名を取得します。
  • get Host()このURLのホスト名を取得します。
  • getPath()このURLのパス部分を取得します。
  • get Port()このURLのポート番号を取得します。
  • get Protocol()このURLのプロトコル名を取得します。
  • getQuery()このURLのクエリ部分を取得します。
  • getRef()このURLのアンカーポイント(参照)を取得します。
  • getUserInfo()このURLのuserInfo部分を取得します。
  • openConnection()URLConnctionオブジェクトを返します。URLから参照されるリモートオブジェクトへの接続を表します。
  • openConnection(Proxy proxy);指定された代理店を通じて接続を確立する。この方法は、まず接続してからストリームを取得する方法であり、この方法は、オプンConnection().get InputStream()方法の簡略化である。
  • openStream();このURLの接続を開けて、リードストリームを返します。
  • toExternal Form()このURLの文字列は形式を表します。
  • toStering()おなじ
  • URLConnection
  • 類は、アプリケーションとURLとの間の通信リンクを表しています。このような例は、このURL参照を読み取り、書き込みするためのリソースであり、通常、URLを作成する接続にはいくつかのステップが必要です。
  • は、URL上でopenConnection方法を呼び出して接続先を作成する。この接続先は、サービス側に要求を送信する時に、自動的にヘッダファイル情報をロードします。
  • は、設定パラメータと一般要求属性を処理する。
  • connect方法を用いて遠隔オブジェクトへの実際の接続を確立する。
  • リモートオブジェクトが利用可能になりました。
  • コンストラクタ
  • URLConnection(URL);指定されたurlへのリンクを構築する。
  • 一般的な方法:
  • get InputStream()これから開いた接続から読み取った入力ストリームを返します。
  • getOutputStream()この接続に書き込まれた出力ストリームを返します。
  • ドメイン解析
  • はホスト名をIPアドレスに変換し、DNSサーバが必要である。
  • は、一般的にインターネットを利用して、まず要求をDNSに送り、IPアドレスを解析してから、解析されたIPホストにアクセスする。(DNSにアクセスする前に、まずローカルホストファイルで、127..0.1とlocal hostのマッピング関係はこのマシンにあります。このファイルc:\windows\system 32\drives\etc\hostファイルはマニュアルでこのファイルを配置することにより直接アクセスできます。の場合は、直接180.7.33.107 IPにアクセスします。
  • アプリケーション:訪問したくないアドレス、例えば、木馬サイトやソフトウェア更新サイトなどを127..0.1に対応させてもいいです。これらのサイトは本機にアクセスできなくなります。
  • /*
      :    。
       。
    1,    。
    2,            。
    3,  socket            。
    4,         。
    5,  。
    */
    import java.io.*;
    import java.net.*;
    class  PicClient{
        public static void main(String[] args)throws Exception {
            if(args.length!=1){
                System.out.println("     jpg     ");
                return ;
            }
            File file = new File(args[0]);
            if(!(file.exists() && file.isFile())){
                System.out.println("      ,     ,      ");
                return ;
            }
            if(!file.getName().endsWith(".jpg")){
                System.out.println("      ,     ");
                return ;
            }
            if(file.length()>1024*1024*5){
                System.out.println("    ,    ");
                return ;
            }
            Socket s = new Socket("192.168.1.254",10007);
            FileInputStream fis = new FileInputStream(file);
            OutputStream out = s.getOutputStream();
            byte[] buf = new byte[1024];
            int len = 0;
            while((len=fis.read(buf))!=-1){
                out.write(buf,0,len);
            }
            //          
            s.shutdownOutput();
            InputStream in = s.getInputStream();
            byte[] bufIn = new byte[1024];
            int num = in.read(bufIn);
            System.out.println(new String(bufIn,0,num));
            fis.close();
            s.close();
        }
    }
    /*
       
              。 A        。       。         。
      B     ,    。
               A      ,          accept  。  
          B     。
                         。
                              ,  ,              。
           ?
                           。      run   。
    */
    class PicThread implements Runnable{
        private Socket s;
        PicThread(Socket s){
            this.s = s;
        }
        public void run(){
            int count = 1;
            String ip  = s.getInetAddress().getHostAddress();
            try{
                System.out.println(ip+"....connected");
                InputStream in = s.getInputStream();
                File dir =  new File("d:\\pic");
                File file = new File(dir,ip+"("+(count)+")"+".jpg");
                while(file.exists())
                    file = new File(dir,ip+"("+(count++)+")"+".jpg");
                FileOutputStream fos = new FileOutputStream(file);
                byte[] buf = new byte[1024];
                int len = 0;
                while((len=in.read(buf))!=-1){
                    fos.write(buf,0,len);
                }
                OutputStream out = s.getOutputStream();
                out.write("    ".getBytes());
                fos.close();
                s.close();
            }catch (Exception e){
                throw new RuntimeException(ip+"    ");
            }
        }
    }
    class  PicServer{
        public static void main(String[] args) throws Exception{
            ServerSocket ss = new ServerSocket(10007);
            while(true){
                Socket s = ss.accept();
                new Thread(new PicThread(s)).start();
            }
            //ss.close();
        }
    }