Javaはネットワーク通信(TCPプログラミング)を実現します


ヒント:以下はこの記事の内容です。以下のケースは参照用です。

1. TCPネットワークプログラミングとは何ですか?


TCPネットワークプログラミングとは、Socketクラスを使用して通信プログラムを作成することを指します。
TCPプロトコルを使用して通信するプログラムは、プライマリとセカンダリです。1つはサーバー側プログラムと呼ばれ、もう1つはクライアント側プログラムと呼ばれます


2. TCPネットワークプログラミングの原則:

1.アイコン:

ここに画像の説明を挿入

2.クライアント側とサーバー側の分析:

Socketの本質は、データをI / Oストリームに抽象化し、ネットワーク間でデータ
ソケットを送信することです。これは、2台のマシン間の通信のエンドポイントです

サーバー側:クライアントにデータを書き込むことができ、クライアントクライアントから送信されたデータを読み取ることができ
ます:サーバーから送信されたデータを読み取ることができ、サーバーにデータを書き込むことができます

ツールを使用し:
サーバー側:ServerSocketのは、
オブジェクトを作成します:ServerSocketを(int型ポート)
このメソッドは、特定のポートにバインドされたサーバソケットを作成します。
パラメータポートはポート番号で 0〜1024で割っ自分で定義され、インストールされたソフトウェアデフォルトで占有されているポート番号以外のポート番号
callメソッド:Socket(戻り値タイプ)accept()
このメソッドは、このソケットの接続をリッスンして受信します

クライアント:ソケット
作成オブジェクト:Socket(String host、int port)
パラメーターhostはIPアドレスportはポート番号です。
このメソッドはストリームソケットを作成し、指定されたホストのポート番号に接続します。
呼び出し方法: InputStreamクラスgetInputStream()メソッド
このメソッドは、このソケット
                  の入力ストリームを返すことができますOutputStreamクラスのgetOutputStream()メソッド
このメソッドは、このソケットの出力ストリームを返すことができます

3. DOSウィンドウを使用して自分のIPアドレスを確認する方法:

①cmd管理者ウィンドウを開きます

win + rキーを押してコマンドウィンドウをすばやく起動し、cmdと入力して管理者インターフェイスを開きます
ここに画像の説明を挿入
ここに画像の説明を挿入

②コマンドを入力してIPアドレスを表示します

ipconfigコマンドを入力して、マシンのアドレス情報を取得します。IPv4はマシンのIPアドレスです。
ここに画像の説明を挿入


3.ネットワーク通信のケーステスト:

1.サーバー側クラス:

package dreamfly.net.server;

//读取客户端发来的数据,给客户端写出数据

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    
    

    public static void main(String[] args) throws IOException {
    
    

        //1.开启服务器,参数是指开着的端口号
        ServerSocket server = new ServerSocket(8899);
        System.out.println("服务器已成功启动");
        //2.接收客户端发来的连接
        Socket socket = server.accept();
        System.out.println("接收到客户端发来的请求");
        //3.获取读取流
        InputStream in = socket.getInputStream();
        //4.读取数据
//        int data = in.read();      //默认返回的是整数
        for (int i = 0;i < 5;i++){
    
    
            char data = (char)in.read();
            System.out.print(data);
        }
        //5.给客户端写出数据
        System.out.println();
        OutputStream out = socket.getOutputStream();
        out.write("world".getBytes());
        System.out.println("服务器端成功发送数据");
        out.close();
    }
}

IOExceptionメソッドで最初にスローされたときに実行する、try / catchステートメントブロックで囲まれたステートメント例外が発生する可能性があります。最初のスローIOExceptionを選択した後、サーバー側クラスの出力ステートメントは、成功したかどうか検出することです。データを送信します。出力ステートメントは実行されません。これは、データが正常に送信されなかったことを意味します。

2.クライアントクラス:

package dreamfly.net.client;

//读取服务器端发来的数据,给服务器端写出数据

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    
    

    public static void main(String[] args) throws IOException {
    
    
        //1.连接到指定的服务器(ip+port)
        Socket socket = new Socket("127.0.0.1",8899);
        System.out.println("已连接成功");
        //2.获取写出流
        OutputStream out = socket.getOutputStream();
        //3.写出数据,字节流只能写出整数或字节数组
        //将hello对应整数编程对应的字节数组,getBytes()将String转换为byte[]
        out.write("hello".getBytes());
        System.out.println("客户端成功发送数据");
        InputStream in = socket.getInputStream();
        for (int i = 0;i < 5;i++){
    
    
            char data = (char)in.read();
            System.out.print(data);
        }
        System.out.println();
        System.out.println("成功接收服务器端数据");
        out.close();
    }
}

4.操作結果:

1.サーバーの電源を入れます

ここに画像の説明を挿入

2.クライアントを開きます

サーバー側の実行結果:
ここに画像の説明を挿入

クライアントの実行結果:
ここに画像の説明を挿入

3.注意が必要な事項:

操作の順序は次のとおりです。最初にサーバーを開き、次にクライアントを実行します
。OutStreamバイトストリームは整数またはバイト配列のみを書き込むことができます文字列データを送信するには、getBytes()メソッドを使用して文字列データをbyte []バイト配列に変換します。

サーバーの電源をオンにせずにクライアントの電源をオンにすると、次の操作結果が得られます。
ここに画像の説明を挿入
理由:サーバーのポート番号が開かれていないため、クライアントはサーバーの対応するポートに接続できません。


五数要約

上記はJavaでの単純なネットワーク通信の内容であり、APIでこの記事で使用されているクラスの説明が添付されています。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_48455576/article/details/113197775