Java 网络编程TCP协议之发送数据和接收数据的详解

Posted 路宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 网络编程TCP协议之发送数据和接收数据的详解相关的知识,希望对你有一定的参考价值。

TCP协议:

  1. 传输控制协议(Transmission Control Protocol)
  2. TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端和服务器端,由客户端向服务器端发出连接请求,每次连接的创建都要经历“三次握手”。
  3. 三次握手: TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。
    第一握手,客户端向服务器发出连接请求,等待服务器确认。
    第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
    第三次握手,客户端再次向服务器端发送确认消息,确认连接。
  4. 完成三次握手,连接建立后,客户端和服务器就可以开始数据传输了。由于这种面向连接的特性,TCP协议可以保证数据传输的安全,所以应用十分广泛,例如上传文件,下载文件,浏览网页等。

接下来我们看下面这张图来再次理解三次握手

接下来我们来使用TCP发送数据,和接收数据
一、创建一个类来发送数据,代码如下,注释已经在代码中给出

/*
      TCP发送数据的步骤:
      1.创建客户端的Socket对象(Socket)
      2.获取输出流,写数据
      3.释放资源
   */
public class ClientDemo 
    public static void main(String[] args) throws IOException 
        //创建客户端的Socket对象(Socket)
        //Socket(InetAddress address,int port) 创建流套接字并将其连接到指定ip地址的指定端口号
//        Socket socket = new Socket(InetAddress.getByName("192.168.0.124"),10000);
        //Socket(String host,int port) 创建流套接字并将其连接到指定主机上的指定端口号
        Socket socket = new Socket("192.168.0.124", 10000);
        //获取输出流,写出数据
        OutputStream os = socket.getOutputStream();
        os.write("hello,TCP,我来了".getBytes());
        //释放资源
        socket.close();
    


二、接收客户端发送来的数据,显示在控制台

/*
        TCP接收数据的步骤:
            1.创建服务器端的Socket对象(ServerSocket)
            2.获取输入流,读数据,并把数据显示在控制台上
            3.释放资源
     */
public class ServerDemo 
    public static void main(String[] args) throws IOException 
        //创建服务器端的Socket对象(ServerSocket)
        //ServerSocket(int port)创建绑定到指定端口的服务器套接字
        ServerSocket serverSocket = new ServerSocket(10000);

        //Socket accept() 侦听要连接到此套接字并接受它
        Socket socket = serverSocket.accept();

        //获取输入流,读数据,并把数据显示到控制台
        InputStream is = socket.getInputStream();
        byte[] bys = new byte[1024];
        int len = is.read(bys);
        String data = new String(bys, 0, len);
        System.out.println("数据是:" + data);

        //释放资源
        serverSocket.close();
    

之后我们来通过一个练习,来加深TCP的使用

一、客户端发送数据,接收服务器反馈

/*
    客户端:发送数据,接收服务器反馈

 */
public class ClientDemo 
    public static void main(String[] args) throws IOException 
        //创建客户端的Socket对象
        Socket socket = new Socket("192.168.0.124", 10000);

        //获取输出流,写数据
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello,TCP,我来了".getBytes());

        //接收服务器的反馈
        InputStream inputStream = socket.getInputStream();
        byte[] bys = new byte[1024];
        int len = inputStream.read(bys);
        System.out.println("客户端:" + new String(bys, 0, len));

        //释放资源
        socket.close();
    


二、服务器:接收数据,给出反馈

/*
    服务器接收数据,给出反馈
 */
public class ServerDemo 
    public static void main(String[] args) throws IOException 
        //创建服务器端的Socket对象(ServerSocket)
        ServerSocket serverSocket = new ServerSocket(10000);

        //监听客户端连接,返回一个Socket对象
        Socket socket = serverSocket.accept();

        //获取输入流,读数据,并把数据显示在控制台
        InputStream inputStream = socket.getInputStream();
        byte[] bys = new byte[1024];
        int len = inputStream.read(bys);
        System.out.println("服务器:" + new String(bys, 0, len));

        //给出反馈
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("数据已经收到".getBytes());

        //释放资源
        serverSocket.close();
    

以上是关于Java 网络编程TCP协议之发送数据和接收数据的详解的主要内容,如果未能解决你的问题,请参考以下文章

Java 网络编程UDP协议之发送数据和接收数据的详解

Java之网络编程

socket tcp/ip 之简单ssh协议

Java编程基础之网络编程

java-TCP协议发送和接收数据

TCP/IP协议 怎么用JAVA发送和接收二进制数据 要具体实例