ホームページ  >  記事  >  Java  >  ネットワーク通信例を詳しく解説

ネットワーク通信例を詳しく解説

零下一度
零下一度オリジナル
2017-06-25 09:33:031599ブラウズ

概要

1. ネットワークモデル

OSI (Open System Interconnection) モデルは、ネットワーク システム構造の概要であり、ネットワークをアプリケーション層、プレゼンテーション層の 7 つの層に分割します。層、セッション層、トランスポート層、ネットワーク層、データリンク層、物理層。

2. IP プロトコル

ネットワーク層プロトコルは、インターネット上のコンピューターを識別および検索するためのルールを指定します。

3.TCPプロトコル

データ送信の前に、「3ウェイハンドシェイク」によって接続が確立され、データが送信される状況に適しています。高いデータ精度が必要ですが、データ送信前に接続を確立する必要があるため、通信速度が遅くなります。

4. UDP プロトコル

データ送信前に接続を確立する必要がなく、データ送信の精度が高くない場合に適しています。通常、チャット情報はこのプロトコルを通じて送信されます。

5. HTTP プロトコル

HTTP プロトコルは、オペレーティング システムまたはネットワーク アプリケーションがネットワーク サービスにアクセスするためのインターフェイスを提供するアプリケーション層プロトコルです。

6. ポート port

データがコンピューターに到達すると、ターゲット アプリケーションを見つけるために、0 ~ 65535 の範囲の整数値が各アプリケーションに割り当てられます。この整数値は ポートです。ここから、ポートがコンピュータ上のアプリケーション プログラムを表しており、データが所定のプログラムに正確に到達することが保証されていることがわかります。ポートは複数のアプリケーションによって同時に占有されることはできません。アプリケーションが終了した後、ポートはすぐには解放されません。メモリ遅延占有時間は通常非常に短いものです。ポート 0 ~ 1023 は、システム アプリケーションや他のアプリケーションによってすでに占有されています。プログラム設計中は、この範囲のポートを使用しないでください。

7. ソケット

ソケットはデータを送受信するためのツールです。送信者はソケットを通じてデータを送信し、受信者はソケットを通じて指定されたポートをリッスンしてデータを取得します。

8. TCP プロトコルが使用されるか UDP プロトコルが使用されるかに関係なく、データはバイト形式でのみ送信できます。

II TCP プログラミング

1. ソケットを通じて取得した入力ストリームまたは出力ストリームを閉じると、ソケットが閉じられます。

2. ソケットを通じて取得された出力ストリームは、出力が完了した後に閉じる必要があります。そうしないと、反対側の対応する入力ストリームがブロックされます。出力ストリーム オブジェクトを通じて出力ストリームを閉じるときに、

Socket オブジェクトを同時に閉じると、相手は Socket に対応するオブジェクトを取得できなくなるため、 出力ストリームは、 Socket の shutdownOutput メソッド。

3. クライアントの一般的な手順:

Socket socket=new Socket(String host,int port);//创建客户端Socket,发送与接收数据,需要指明服务器IP与端口OutputStream os=socket.getOutputStream();//获取输出流,向服务器发送数据..........
os.flush();
socket.shutdownOutput();//关闭输出流,防止服务器端阻塞InputStream is=socket.getInputStream();//获取输入流,输入流包含服务器的反馈信息............

socket.close();//关闭socket,同时关闭输入与输出流

4. サーバーの一般的な手順:

ServerSocket server=new ServerSocket(int port);//建立服务器端套接字,指定监听端口Socket socket=server.accept();//获取访问客户端的Socket,阻塞线程InputStream is=socket.getInputStream();//获取输入流,其中包含客户端发送的数据.............

OutputStream os=socket.getOutputStream();//获取输出流,向客户端反馈信息..............
os.flush();
os.shutdownOutput();

server.close();

5.Demo

クライアント

rree

サーバー

package com.javase.networkCommunication.tcp.demo02;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class ImgClient {public static void main(String[] args) throws UnknownHostException, IOException {
        Socket socket = new Socket("192.168.146.1", 10007);
        FileInputStream is = new FileInputStream("Files/1.jpg");
        OutputStream os = socket.getOutputStream();byte[] buf = new byte[1024];// 先将数据读取到缓冲区,比频繁的从硬盘读取速度快int length = 0;while ((length = is.read(buf)) != -1) {
            os.write(buf, 0, length);
        }
        os.flush();
        socket.shutdownOutput();// 如果输出流不关闭,服务端对应的输入流会阻塞InputStream replyIs = socket.getInputStream();//不会阻塞线程byte[] buf01 = new byte[1024];int length01 = replyIs.read(buf01);
        String reply = new String(buf01, 0, length01);
        System.out.println(reply);
        
        is.close();
        socket.close();
    }

}

3 つの UDP プログラミング

1. データ処理方法

UDP プロトコルはデータ パケットの形式でデータを送信し、各パケットの最大値は 64k です。

2. データを送信するための一般的な手順:

package com.javase.networkCommunication.tcp.demo02;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import org.junit.Test;public class ImgServer {

    @Testpublic void test01() throws IOException {
        ServerSocket serverSocket = new ServerSocket(10007);
        Socket socket = serverSocket.accept();// 线程阻塞,等待请求System.out.println("hostAddress=" + socket.getInetAddress().getHostAddress());
        InputStream is = socket.getInputStream();
        FileOutputStream os = new FileOutputStream("Files/2.jpg");
        System.out.println(1);byte[] buf = new byte[1024];int length = 0;
        System.out.println(2);int count = 3;while ((length = is.read(buf)) != -1) {
            os.write(buf, 0, length);
            System.out.println(count++);
        }
        os.flush();
        os.close();
        System.out.println("图片上传结束");/*PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        out.write("success");*/OutputStream out = socket.getOutputStream();
        out.write("success".getBytes());
        out.flush();
        socket.shutdownOutput();
        System.out.println("响应数据已发出");
        
        serverSocket.close();
    }

}

3. データを受信するための一般的な手順:

DatagramSocket socket=new DatagramSocket();//创建数据报套接字用于发送数据//DUP协议采用数据包分段发送数据,因此需要建立数据包,在数据包中指明目的地IP与端口DatagramPacket packet= DatagramPacket(byte buf[], int offset, int length,InetAddress address, int port);
socket.send(packet);

以上がネットワーク通信例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。