ネットワークプログラミング完了

77189 ワード

ネットワークプログラミングTCP/IP
一、概説
地球村:西安にいます.アメリカの友达がいます.
例えば、手紙の転送、電話、メール
コンピュータネットワーク
コンピュータネットワークとは、地理的に異なる独立した機能を有する複数のコンピュータとその外部機器を、通信回線を介して接続し、ネットワークオペレーティングシステム、ネットワーク管理ソフトウェアおよびネットワーク通信プロトコルの管理と協調の下で、資源共有と情報伝達を実現するコンピュータシステムである.
ネットワークプログラミングの目的
ラジオ...コミュニケーション情報、データコミュニケーション、通信を伝播する
効果を達成するには何が必要ですか?
  • は、ネットワーク上のホストIP+ポートを正確に特定し、このコンピュータ上のリソース
  • に特定する方法です.
  • ホストを見つけて、どのようにデータを転送しますか?

  • 二、ネットワーク通信要素
    人工知能:スマートカー工場は人が少ない
    ネットワーク通信をどのように実現しますか?
    通信双方アドレス:IP+ポート
  • ip
  • ポート番号
  • ルール:ネットワーク通信プロトコル
    TCP/IPリファレンスモデル[外部リンクピクチャの転送に失敗した場合、ソース局に盗難防止チェーン機構がある可能性があり、ピクチャを保存して直接アップロードすることを推奨する(img-bj 2 RLX 2 G-1608805017759)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-201232175513040.png)]
    小結
  • ネットワークプログラミングでは、主に2つの問題があり、ネットワーク上の1台または複数のホストがホストを見つけた後、どのように通信するか
  • である.
  • ネットワークプログラミングにおける要素IPとポート番号ネットワーク通信プロトコルTCP
  • 万物すべて対象
  • 三、IP
    ipアドレス:InetAddressクラス
  • ネットワーク上の唯一のコンピュータを特定する
  • 127.0.0.1:本機localhost
  • ipアドレスの分類IPV 4/IPV 6
  • IPV 4 127.0.0.1 4バイトからなる0~~255
  • .
  • IPV 6 ABCD:EF 01:2345:6789:ABCD:EF 01:2345:6789 128ビット8個の符号なし整数
  • パブリックネットワーク(インターネット)/プライベートネットワーク(ローカルエリアネットワーク)
  • ABCD類アドレス
  • 192.168.xx.xxは組織内部で使用する
  • に特化している.
  • ドメイン名
  • IP: www.baidu.com

  • package com.gdh.InetAddress;
    
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    public class TestInetAddress {
         
       public static void main(String[] args) {
         
           try {
         
               //      
               InetAddress.getLocalHost();
               InetAddress.getByName("localhost");
               InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
               System.out.println(inetAddress);
               //    ip  
               InetAddress inetAddress1 = InetAddress.getByName("www.baidu.com");
               System.out.println(inetAddress1);
    
               //     
               System.out.println(inetAddress1.getAddress());
    
               System.out.println(inetAddress1.getCanonicalHostName());  //     
    
               System.out.println(inetAddress1.getHostName());  //           
    
               System.out.println(inetAddress1.getHostAddress()); //ip
    
           } catch (UnknownHostException e) {
         
               e.printStackTrace();
           }
       }
    }
    

    四、ポート
    ポートはコンピュータ上のプログラムのプロセスを表します.InetSocketAddressクラス
  • 異なるプロセスには異なるポート番号があります!ソフトウェアを区別するための
  • は0~65536
  • と規定する.
  • TCP、UDP:65535*2 tcp:80 udp:80単一プロトコルの下で、ポート番号は
  • に衝突できません.
  • ポート分類
  • 共有ポート0~1023
  • HTTP:80
  • HTTPS:443
  • FTP:21
  • Telent:23

  • プログラム登録ポート:1024~49151、ユーザーまたはプログラムの割り当て
  • Tomcat:8080
  • MySQL:3306
  • Oracle:1521
  • Sqlserver:1433

  • ダイナミック、プライベート:49152~65535
    netstat -ano                    #      
    netstat -ano|findstr "7752"     #       
    tasklist|findstr "2060"         #         
    Ctrl+Shift+ESC                  #       
    
    package com.gdh.InetAddress;
    import java.net.InetSocketAddress;
    public class TestInetSocketAddress {
             
        public static void main(String[] args) {
             
            InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);
            System.out.println(socketAddress);
            System.out.println(socketAddress.getAddress()); //    
            System.out.println(socketAddress.getHostName()); //   
            System.out.println(socketAddress.getPort()); //  
        }
    }
    

  • 五、通信プロトコル
    合意:約束は、私たちが今話している共通語のようなものです.
    ネットワーク通信プロトコル:速度、伝送符号率、コード構造、伝送制御...
    階層化:伝送層TCP/IP(実際には一組のプロトコル)重要なプロトコルTCP(ユーザ伝送プロトコル)UDP(ユーザデータ報プロトコル)IP(ネットワーク相互接続プロトコル)
    TCP、UDP比較
  • TCP:電話
  • 接続が必要、
  • 安定
  • 3回握手4回手を振る
          ,      !
    A:   ?
    B:    ?
    C:   !
    
        
    A:    
    B:       ?
    B:         ?
    A:      
    
  • 客服端、サービス端
  • 伝送が完了し、接続が解放され、効率が低い
  • UDP:メール
  • 接続せず、不安定
  • 客服端、サービス端:明確な境界がない
  • 準備ができているかどうかにかかわらず、あなたに送ることができます.
  • ミサイル
  • DDOS:洪水攻撃(飽和攻撃)

  • 六、TCP
    クライアント
  • 接続サーバSocket
  • 送信メッセージ
    package com.gdh.InetAddress.lesson02;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    //   
    public class TestClientDemo01 {
           
        public static void main(String[] args) {
           
            Socket socket =null;
            OutputStream os = null;
            try {
           
                //1.         ,  
                InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
                int port = 9999;
                //2.    socket  
                 socket = new Socket(inetAddress,port);
                //3.    IO 
                 os = socket.getOutputStream();
                 os.write("helllo,  ".getBytes());
    
            } catch (Exception e) {
           
                e.printStackTrace();
            } finally {
           
                if (os != null) {
           
                    try {
           
                        os.close();
                    } catch (IOException e) {
           
                        e.printStackTrace();
                    }
                }
                if (socket != null) {
           
                    try {
           
                        socket.close();
                    } catch (IOException e) {
           
                        e.printStackTrace();
                    }
                }
    
            }
    
        }
    }
    
  • サーバ
  • サービスを確立するポートサーバSocker
  • ユーザの接続待ちaccept
  • 受信用メッセージ
  • package com.gdh.InetAddress.lesson02;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    //   
    public class TestServerDemo02 {
         
        public static void main(String[] args) {
         
            ServerSocket serverSocket =null;
            Socket socket =null;
            InputStream is =null;
            ByteArrayOutputStream baos =null;
            try {
         
                //1.    ip  
                serverSocket = new ServerSocket(9999);
                while (true){
         
                    //2.         
                    socket = serverSocket.accept();
                    //3.        
                    is = socket.getInputStream();
                    //4.   
                    baos = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len=is.read(buffer)) !=-1){
         
                        baos.write(buffer,0,len);
                    }
                    System.out.println(baos.toString());
                }
    
            } catch (IOException e) {
         
                e.printStackTrace();
            } finally {
         
                //5.    
                if (baos != null) {
         
                    try {
         
                        baos.close();
                    } catch (IOException e) {
         
                        e.printStackTrace();
                    }
                }
                if (is != null) {
         
                    try {
         
                        is.close();
                    } catch (IOException e) {
         
                        e.printStackTrace();
                    }
                }
                if (socket != null) {
         
                    try {
         
                        socket.close();
                    } catch (IOException e) {
         
                        e.printStackTrace();
                    }
                }
                if (serverSocket != null) {
         
                    try {
         
                        serverSocket.close();
                    } catch (IOException e) {
         
                        e.printStackTrace();
                    }
                }
    
            }
    
        }
    }
    

    ファイルのアップロード
    package com.gdh.InetAddress.lesson02;
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    //   
    public class TestServerDemo02 {
        public static void main(String[] args) throws Exception {
            //1.    
            ServerSocket serverSocket = new ServerSocket(9000);
            //2.       、
            Socket socket = serverSocket.accept();  //     ,          、
            //3.     
            InputStream is = socket.getInputStream();
            //4.        
            FileOutputStream fos = new FileOutputStream(new File("receive.jpg"));
            byte[] buffer = new byte[1024];
            int len;
            while ((len=is.read(buffer))!=-1){
                fos.write(buffer,0,len);
            }
            //          
            OutputStream os = socket.getOutputStream();
            os.write("      ,     ".getBytes());
    
            //5.    
            fos.close();
            is.close();
            socket.close();
            serverSocket.close();
    
        }
    }
    
    package com.gdh.InetAddress.lesson02;
    
    import java.io.*;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    //   
    public class TestClientDemo02 {
        public static void main(String[] args) throws Exception {
            //1.  socket  
            Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9000);
            //2.     
            OutputStream os = socket.getOutputStream();
            //3.    
            FileInputStream fis = new FileInputStream(new File("looker.jpg"));
            //4.    
            byte[] buffer = new byte[1024];
            int len;
            while ((len=fis.read(buffer))!=-1){
                os.write(buffer,0,len); //     
            }
            //     ,      
            socket.shutdownOutput();//       
    
            //         ,      
            InputStream is = socket.getInputStream();
            //       
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer2 = new byte[1024];
            int len2;
            while ((len2=is.read(buffer2))!=-1){
                baos.write(buffer2,0,len2); //     
            }
            System.out.println(baos.toString());
            //    
            baos.close();
            is.close();
            fis.close();
            os.close();
            socket.close();
        }
    }
    

    七、UDP
    メールを送る:接続しないで、相手の住所を知る必要があります
    送信側
    package com.gdh.InetAddress.lesson03;
    
    import java.net.*;
    //        
    public class UdpClientDemo01 {
         
        public static void main(String[] args) throws Exception {
         
            //1.    Socket
            DatagramSocket socket =new DatagramSocket();
            //2.   
            String msg = "  ,   ";
            InetAddress inetAddress = InetAddress.getByName("localhost");
            int port = 9090;
            DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,inetAddress,port);
            //3.   
            socket.send(packet);
            //4.   
            socket.close();
        }
    }
    

    じゅしんたんし
    package com.gdh.InetAddress.lesson03;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    //            
    public class UdpServerDemo01 {
        public static void main(String[] args) throws Exception {
            //    
            DatagramSocket datagramSocket = new DatagramSocket(9090);
            //     
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
            datagramSocket.receive(packet); //    
            System.out.println(packet.getAddress().getHostAddress());
            System.out.println(new String(packet.getData(),0,packet.getLength()));
            datagramSocket.close();
        }
    }
    

    メッセージのループ送信
    package com.gdh.InetAddress.chat;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;
    
    public class UdpSenderDemo01 {
         
        public static void main(String[] args) throws Exception {
         
            DatagramSocket socket = new DatagramSocket(8888);
    
            ///          System.in
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            while (true){
         
                String data = reader.readLine();
                byte[] datas = data.getBytes();
                DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
                socket.send(packet);
                if(packet.equals("bye")){
         
                    break;
                }
            }
            socket.close();
    
        }
    }
    

    受信者
    package com.gdh.InetAddress.chat;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    public class UdpReceviceDemo01 {
         
        public static void main(String[] args) throws Exception {
         
            DatagramSocket socket = new DatagramSocket(6666);
    
            while (true){
         
                //      
                byte[] container = new byte[1024];
                DatagramPacket packet = new DatagramPacket(container,0,container.length);
                socket.receive(packet); //       
                //    
                byte[] data = packet.getData();
                String receiveData = new String(data, 0, data.length);
                System.out.println(receiveData);
                if(receiveData.equals("bye")){
         
                    break;
                }
    
            }
            socket.close();
        }
    }
    

    オンラインコンサルティングは、お二人とも送信でも受信でも構いません
    package com.gdh.InetAddress.chat;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;
    
    public class TalkSend implements Runnable{
         
        DatagramSocket socket =null;
        BufferedReader reader =null;
    
        private int fromPort;
        private String toIP;
        private int toPort;
    
        public TalkSend(int fromPort, String toIP, int toPort) {
         
            this.fromPort = fromPort;
            this.toIP = toIP;
            this.toPort = toPort;
            try {
         
                socket = new DatagramSocket(fromPort);
                ///          System.in
                reader = new BufferedReader(new InputStreamReader(System.in));
            } catch (Exception e) {
         
                e.printStackTrace();
            }
        }
    
        @Override
        public void run() {
         
            while (true){
         
                String data = null;
                try {
         
                    data = reader.readLine();//      
                    byte[] datas = data.getBytes();
                    DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));
                    socket.send(packet);
                    if(packet.equals("bye")){
         
                        break;
                    }
                } catch (Exception e) {
         
                    e.printStackTrace();
                }
    
            }
            socket.close();
        }
    }
    
    package com.gdh.InetAddress.chat;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    public class TalkReceive implements Runnable{
         
        DatagramSocket socket =null;
        private int port;
        private String msgFrom;
    
        public TalkReceive(int port,String msgFrom) {
         
            this.port = port;
            this.msgFrom = msgFrom;
            try {
         
                socket = new DatagramSocket(port);
            } catch (Exception e) {
         
                e.printStackTrace();
            }
        }
    
        @Override
        public void run() {
         
            while (true){
         
                try {
         
                    //      
                    byte[] container = new byte[1024];
                    DatagramPacket packet = new DatagramPacket(container,0,container.length);
                    socket.receive(packet); //       
                    //    
                    byte[] data = packet.getData();
                    String receiveData = new String(data, 0, data.length);
                    System.out.println(msgFrom+":"+receiveData);
                    if(receiveData.equals("bye")){
         
                        break;
                    }
                } catch (IOException e) {
         
                    e.printStackTrace();
                }
            }
            socket.close();
        }
    }
    
    package com.gdh.InetAddress.chat;
    
    public class TalkStudent {
         
        public static void main(String[] args) {
         
            //      
            new Thread(new TalkSend(7777,"localhost",9999)).start();
            new Thread(new TalkReceive(8888,"  ")).start(); //    
        }
    }
    
    package com.gdh.InetAddress.chat;
    
    public class TalkTeacher {
         
        public static void main(String[] args) {
         
            new Thread(new TalkSend(5555,"localhost",8888)).start();//     
            new Thread(new TalkReceive(9999,"  :")).start();
        }
    }
    

    八、URL統一リソースロケータ
    URL:インターネット上のリソースを特定する
    DNSドメイン名解析www.daidu.com xxx.xxx.xxx.xxx
    //ip  :  /   /  
    URL url = new URL("http://localhost:8080/hello/index.jsp?username=gdh&password=123");
            System.out.println(url.getProtocol()); //  
            System.out.println(url.getHost()); //  IP
            System.out.println(url.getPort()); //  
            System.out.println(url.getPath()); //  
            System.out.println(url.getFile()); //   
            System.out.println(url.getQuery()); //  
    

    ネットワークリソースのダウンロード
    package com.gdh.InetAddress.lesson04;
    
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class UrlDown {
         
        public static void main(String[] args) throws Exception {
         
            //1.    
            URL url = new URL("https://www.cnblogs.com/51ma/p/12462688.html");
            //2.       HTTP
            HttpURLConnection urlConnection =(HttpURLConnection) url.openConnection();
            InputStream inputStream = urlConnection.getInputStream();
            FileOutputStream fileOutputStream = new FileOutputStream("java.html");
            byte[] buffer = new byte[1024];
            int len;
            while ((len=inputStream.read(buffer))!=-1){
         
                fileOutputStream.write(buffer,0,len);  //      
            }
            fileOutputStream.close();
            inputStream.close();
            urlConnection.disconnect();//    
    
        }
    }