zoukankan      html  css  js  c++  java
  • 多线程(五)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 }
  • 相关阅读:
    flex 图表使用百分比示例
    flex 图标设置百分比或者其它符号
    大学生求职(打油诗一首)
    flex 图表categoryField设置 labelFunction使用
    如何配置EclipseMe
    google chart图表使用
    Codeforces #Round 632 div2 A~C
    牛客的两道dfs
    约数
    Atcoder ABC162 D RGB Triplets
  • 原文地址:https://www.cnblogs.com/shenhx666/p/15083835.html
Copyright © 2011-2022 走看看