TCP通信-C / SとソケットServerSocketを

Clientクラス:Socketクラス


  • クライアントのTCP通信:サーバーに送信された接続要求は、サーバにデータを送信し、サーバは、2つのストリームIO、データを読み出します

  • java.lang.Object上位の
    後継にjava.net.Socket

  • コンストラクタ:

    1. ソケット(文字列ホスト、INTポート)
      ストリームソケットを作成し、指定されたホスト上の指定されたポート番号に接続します。
      パラメータ:
      文字列のホスト:サーバのホスト名/ IPアドレス
      INTポート:サーバーのポート番号
  • メンバーの方法:
    1. OutputStreamのgetOutputStream()は、
      このソケットの出力ストリームを返します。
    2. InputStreamのgetInputStream()は、
      このソケットの入力ストリームを返します。
    3. 空に近い()は、
      ソケットを閉じ
  • 注意:
    1. クライアント側とサーバー側の対話はあまりにもネットワークフローソケットを提供するために使用されなければならない場合は、あなたが自分で作成するストリームオブジェクトを使用することはできません
    2. 私たちは、クライアントのSocketオブジェクトを作成すると、サーバが起動しない場合、それは例外がスローされます、サーバーのパスとの接続を確立するためにTCPプロトコルを使用します。

サーバ・クラス:ServerSocketのクラス


  • サーバー側のTCP通信:クライアントの要求を受け入れるためには、クライアントが戻って二回IOストリームクライアント側のデータを書き込むために、読み取るためにデータを送信し、待機状態にありました

  • java.lang.Object上位の
    後継java.net.ServerSocket

  • コンストラクタ:
    1. サーバーソケット(INTポート)
      指定されたポート上のサーバソケットを作成し、オペレーティングシステムがランダムに割り当て設定されていないが、通信できません。
  • メンバー方法
    1. ソケット)(受け入れ
      のために待機し、このソケットへの接続を受け入れます。
  • 注意:あなたが要求しているクライアントオブジェクトのソケットを取得するために受け入れる()メソッドを使用できるように、サーバーが一つのことをクリアする必要があり、あなたは、クライアントによって要求されたサーバーを知っている必要があります


package cn.learn.web;

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

public class client {
    public static void main(String[] args) throws IOException {
        //1.创建客户端对象Socket,构造方法绑定服务器IP地址和端口号
        Socket socket = new Socket("127.0.0.1",8020);
        //2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
        OutputStream outputStream = socket.getOutputStream();
        //3.使用流中的write方法给服务器发送数据,需要转换成字节数组
        outputStream.write("服务器你好".getBytes());

        //4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
        InputStream clientIn = socket.getInputStream();
        //5.使用InputStream对象中的read()方法,读取服务器回写的数据
        byte[] bytes = new byte[1024];
        int len =clientIn.read(bytes);
        //打印看看
        System.out.println(new String(bytes,0,len));

        //6.释放资源,只关闭Socket的IO流就行
        socket.close();

    }
}

package cn.learn.web;

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(8020);

        //2.使用serverSocket对象中的方法accept,获取到请求的客户端对象Socket(含地址和端口号)
        Socket socket1 = server.accept();

        //3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
        InputStream serveIn = socket1.getInputStream();

        //4.使用serveIn的方法read,读取客户端发送的数据
        byte[] bytes = new byte[1024];
        //获取读取的数据有效长度
        int len = serveIn.read(bytes);
        //打印看看
        System.out.println(new String(bytes,0,len));

        //5.使用Socket对象中的方法getOutputStream()获取网络字节输入流OutputStream对象
        OutputStream serverOut = socket1.getOutputStream();

        //6.使用serverOut中的write方法回写给客户端
        serverOut.write("我收到了".getBytes());

        //7.释放socket1与server的流
        server.close();
        socket1.close();
    }
}

おすすめ

転載: www.cnblogs.com/huxiaobai/p/11610095.html