JavaTCP通信程序

523 阅读3分钟

1628478777528.jpeg

highlight: a11y-dark

1628478766221.jpeg

JavaTCP

TCP通信程序

  • TCP通信原理

TCP通信协议是一种可靠的网络协议,它在通信的两端(客户端服务端)各建立一个Socke对象,从而在通信的两端形成网络虚拟链路,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输,在TCP连接中由客户端向服务端发送连接请求,每次连接的创建都要需要经历三次握手

三次握手
第一次客户端向服务端发送连接请求,等待服务器确认
第二次服务器向客户端回送一个响应,通知客户端收到了连接请求
第三次客户端再次向服务器发送确认信息,确认连接

Java对基于TCP协议的网络提供了良好的封装,使用Socket对象代表两端的通信接口,并通过Socket产生IO流来进行网络通信,java为客户端提供了Scoket类,为服务端提供了SeverSocket类

A9DB23A030E74B4F14342C947DCABC66.jpg

  • TCP发送数据

Socket类实现客户端套接字(也称为套接字),套接字是两台机器之间通讯的端点。

套接字的实际工作由SocketImol类的实例执行,应用程序通过更改创建套接字实现套接字工厂,可以配置自己创建适合本地防火墙的套接字

  1. Socket类主要的构造方法

备注:Port(端口号),host(主机IP地址)。

Socket()----------创建一个未连接的套接字,并使用系统默认类型的SocketImpl

Socket so=new Socket();

Socket(InetAddress address,int port)---------创建流套接字并将其连接到指定IP地址的指定端口号

Socket soo=new Socket(InetAddress.getByName( "192.168.1.66" ),10000);

Socket(String host,int port)--------------创建套接字并将其连接到指定远程端口上的指定远程主机

Socket so=new Socket( "192.168.7.186" ,10010);

备注:第二个构造方法和第三个做的工作是一样的,底层会自动将第三构造方法转化为第二构造方法的那种形式

  • TCP接收数据

ServerSocket

这个类实现了服务器套接字。服务器套接字等待通过网络进入的请求。它根据该请求执行一些操作,然后可能将结果返回给请求者

服务器套接字的实际工作由SocketImpl类的实例执行,应用程序可以更改创建的套接字实现的套接字工厂,以配置自己创建适合本地防火墙的套接字

1. SeverSocket主要构造方法:

ServerSocket() ----------创建未绑定的服务器套接字

ServerSocket ss=new ServerSocket();

SeverSocket(int port)  ----------创建绑定到指定端口的服务器套接字

ServerSocket ss=new ServerSocket(10000);

2. SeverSocket方法:

Socket accept()----------侦听到要连接到此的套接字并接收它

ServerSocket ss=new ServerSocket(10000);

Socket s=ss.accept();

3.IO与Socket

Socket_IO作用
getInputStream()返回此套接字输入流
getOutputStream()返回此套接字输入流

public class TCP_Demo2 {
    public static void main(String[] args) throws IOException {
        //创建绑定到端口的服务器套接字
        ServerSocket ss=new ServerSocket(10000);
        Socket s=ss.accept();//侦听到连接到此套接字并接收它
        //获取输入流,并读数据
        InputStream is=s.getInputStream();
        byte [] b=new byte[1024];
        int lne=is.read(b);
        String date=new String(b,0,lne);
        System.out.println(date);
        ss.close();
    }
}

public class TCP_demo {
    //客户端与网络端建立虚拟网络链
//    TCP发送端和接受段建立逻辑关系
    public static void main(String[] args) throws IOException {
        //创建服务端的Socket对象
        Socket so=new Socket("192.168.125.186",10000);
//        返回此套接字的输入流。
       OutputStream os=so.getOutputStream();
      os.write("牛马".getBytes());
        so.close();
    }
}

  注意:

   1.TCP发送数据(客户端)和TCP接受数据(服务端)的端口(port)要相同
   2.端口是设备是应用程序的唯一标识。端口号在普通应用程序上取1024以上的整数作为端口号0~1023之间的端口号主要用于一些知名的网络服务和应用
   3.在实操中,要先去运行服务端,再去运行客户端。