• 多线程(五)TCP通信


    1.TCP通信

    TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建socket对象。

    区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地发送数据。

    而TCP通信是严格区分客户端与服务器端的,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以主动连接客户端,并且服务器端程序需要事先启动,等待客户端的连接。

     

    2Socket类

    用于实现TCP客户端程序。

    2.1构造方法

    此方法参数第一个是字符串类型的ip地址,第二个是端口号

     此方法参数第一个是Inetaddress类型的对象,其中也封装了ip地址,第二个是端口号

    2.2常用方法

    该方法返回一个int类型的数值,是一个端口号

     

     该方法返回的是一个Inetaddress类型的ip地址值

    该方法返回一个InputStream类型的输入流对象,如果该对象是由服务器端的Socket返回,就用于读取客户端发送的数据,反之,用于读取服务器端发送的数据

     该方法返回一个OutputStream类型的输出流对象,如果该对象是由服务器端的Socket返回,就用于向客户端发送数据,反之,用于向服务器端发送数据

    在Socket类的常用方法中,getInputStream()和getOutStream()方法分别用于获取输入流和输出流。当客户端和服务端建立连接后,数据是以IO流的形式进行交互的,从而实现通信。


    释放资源

     

    3ServerSocket类

    3.1构造方法

     

    参数用来确定端口号

    3.2常用方法

    accept()方法,用来接收来自客户端的请求

    当执行了accept()方法之后,服务器端程序会发生阻塞,直到客户端发出连接请求,accept()方法才会返下执行。

    4.简单的TCP网络程序

    客户端:

     1 //客户端
     2 public class TCPLX {
     3     public static void main(String[] args) throws UnknownHostException, IOException {
     4         //创建客户端对象,明确要链接的服务器端的ip地址和端口号
     5         Socket socket = new Socket("127.0.0.1",8000);
     6         //创建字节输出流,目的地是服务器端
     7         OutputStream os = socket.getOutputStream();
     8         //写出字节
     9         os.write("你好".getBytes());
    10         
    11         //接收客户端的回复
    12         //获取字节输入流,数据源是服务器
    13         InputStream in = socket.getInputStream();
    14         byte[] bytes = new byte[1024];
    15         int len = in.read(bytes);
    16         String ip = socket.getInetAddress().getHostAddress();
    17         System.out.println("ip"+ip+"内容"+new String(bytes,0,len));
    18         //释放资源
    19         socket.close();
    20     }
    21 }

    服务器端:

     1 //服务器端
     2 public class TCPLX2 {
     3     public static void main(String[] args) throws IOException {
     4         //创建服务器对象,明确端口号
     5         ServerSocket server = new ServerSocket(8000);
     6         //创建与客户端链接,并获取与之链接的客户端对象
     7         Socket socket = server.accept();
     8         //获取字节输入流,数据源是客户端
     9         InputStream in = socket.getInputStream();
    10         //读取字节
    11         byte[] bytes = new byte[1024];
    12         int len = in.read(bytes);
    13         //获取ip
    14         String ip = socket.getInetAddress().getHostAddress();
    15         System.out.println("ip:"+ip+"内容:"+new String(bytes,0,len));
    16         
    17         //回复客户端
    18         //获取字节输出流,目的地是客户端
    19         OutputStream os = socket.getOutputStream();
    20         os.write("收到".getBytes());
    21         //释放资源
    22         socket.close();
    23     }
    24 }
  • 相关阅读:
    Linux04 目录的相关操作(mkdir、rmdir、rm、cp)
    【PDARTS】2019-ICCV-Progressive Differentiable Architecture Search Bridging the Depth Gap Between Search and Evaluation-论文阅读
    【NAS with RL】2017-ICLR-Neural Architecture Search with Reinforcement Learning-论文阅读
    智能手机娱乐时代的反思——《娱乐至死》读书笔记
    人必活着,爱才能有所附丽——《玩偶之家》读书笔记
    Brute Force暴力破解
    学生信息管理系统.cpp(大二上)
    通讯录管理系统(大一上)
    如何在Unity中画抛物线
    Unity2.5D Sprite层级显示遮挡问题处理
  • 原文地址:https://www.cnblogs.com/shenhx666/p/15083835.html
Copyright © 2020-2023  润新知