Java TCP协议通信超详细讲解

yizhihongxing

Java TCP协议通信超详细讲解

什么是TCP协议

TCP(Transmission Control Protocol)传输控制协议是一种可靠的、面向连接的传输层协议。TCP协议通过序列号、确认、重传等方式,确保传输的可靠性,但会对网络带宽进行占用,因此适用于对网络传输质量要求高的场景。

TCP协议通信的基本流程

TCP协议通信的基本流程如下:

  1. 服务器启动并等待客户端的连接请求。
  2. 客户端主动发起连接请求,服务器接受连接请求并向客户端发送确认信息。
  3. 双方建立连接后,进行数据通信。
  4. 通信结束后,由其中一方断开连接,另一方接受关闭连接请求。

Java实现TCP协议通信的步骤

Java通过Socket类实现TCP协议通信,具体步骤如下:

  1. 在服务器端创建ServerSocket对象,并调用accept()方法等待客户端连接请求。
  2. 在客户端创建Socket对象,并向服务器IP地址和端口号发起连接请求。
  3. 客户端向服务器发送数据,服务器通过Socket对象的输入流读取数据。
  4. 服务器向客户端发送数据,客户端通过Socket对象的输入流读取数据。
  5. 通信结束后,双方关闭Socket对象。

示例1:Java服务器端和客户端的交互

Java服务器端代码:

import java.net.*;
import java.io.*;

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9090);
        Socket clientSocket = serverSocket.accept();
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            out.println("Server: " + inputLine);
        }
    }
}

Java客户端代码:

import java.net.*;
import java.io.*;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 9090);
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        String userInput;
        while ((userInput = stdIn.readLine()) != null) {
            out.println(userInput);
            System.out.println("Server: " + in.readLine());
        }
    }
}

这个例子展示了一个简单的双向通信,服务器将客户端发送的信息返回给客户端,客户端输出服务器返回的信息。
在服务器端,ServerSocket监听本地IP地址的9090端口,并等待客户端连接。当有客户端发起连接请求时,服务器Socket接受连接请求,将客户端传递过来的信息返回给客户端。

在客户端,通过Socket对象连接服务器,向服务器发送文本并获取服务器返回的文本。

示例2:Java客户端与服务器传输文件

Java服务器端代码:

import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9090);
        Socket clientSocket = serverSocket.accept();
        InputStream in = clientSocket.getInputStream();
        OutputStream out = new FileOutputStream("file.txt");
        byte[] buffer = new byte[1024];
        int length;
        while ((length = in.read(buffer)) != -1) {
            out.write(buffer, 0, length);
        }
        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }
}

Java客户端代码:

import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 9090);
        File file = new File("file.txt");
        InputStream in = new FileInputStream(file);
        OutputStream out = socket.getOutputStream();
        byte[] buffer = new byte[1024];
        int length;
        while ((length = in.read(buffer)) != -1) {
            out.write(buffer, 0, length);
        }
        out.flush();
        in.close();
        socket.close();
    }
}

这个例子展示了如何使用Java客户端向服务器端传输文件。在服务器端,ServerSocket监听本地IP地址的9090端口,并等待客户端连接。当有客户端发起连接请求时,服务器Socket接受连接请求,并通过输入流将客户端传递过来的文件数据写入本地磁盘的文件file.txt中。

在客户端,通过Socket对象连接服务器,并将本地磁盘中的文件通过输出流发送到服务器端。在发送完成后,关闭Socket对象和输入流。

总结

本文介绍了TCP协议的基本概念和Java实现TCP协议通信的步骤。通过两个示例展示了Java服务器端和客户端之间的交互和通过Java客户端向服务器端传输文件的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java TCP协议通信超详细讲解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • HTML5标签嵌套规则详解【必看】

    HTML5标签嵌套规则详解【必看】攻略 HTML5标签嵌套规则是指在HTML文档中,各个标签之间的嵌套关系必须符合一定的规则。这些规则有助于确保HTML文档的结构清晰、语义明确,并且能够正确地被浏览器解析和渲染。下面是HTML5标签嵌套规则的详细讲解。 1. 嵌套规则的基本原则 标签必须按照正确的层次结构进行嵌套,即一个标签可以包含其他标签,但不能交叉嵌套或…

    other 2023年7月27日
    00
  • java中的HashMap多层嵌套

    Java中的HashMap多层嵌套攻略 在Java中,HashMap是一种常用的数据结构,用于存储键值对。HashMap允许多层嵌套,即在HashMap的值中再次使用HashMap作为值。这种多层嵌套的HashMap结构可以用于解决一些复杂的数据存储和访问问题。下面是详细的攻略。 创建多层嵌套的HashMap 要创建多层嵌套的HashMap,可以使用泛型来指…

    other 2023年7月27日
    00
  • PHP面向对象程序设计之构造方法和析构方法详解

    PHP面向对象程序设计之构造方法和析构方法详解 构造方法 构造方法是一种在对象实例化时自动被调用的特殊方法,用于对对象进行初始化操作。在PHP中,构造方法的名称总是__construct()。 构造方法的基本使用 构造函数可以接受参数,这些参数与类的属性进行赋值,同时可以执行一些初始化操作。 以下是一个简单的示例: class Car{ public $br…

    other 2023年6月26日
    00
  • 使用PowerShell实现批量修改或替换文件名

    下面是使用PowerShell实现批量修改或替换文件名的完整攻略。 1. 批量替换文件名 首先,打开PowerShell终端,进入到需要替换文件名的目录下。 然后,使用如下代码进行文件名替换: Get-ChildItem | rename-item -NewName { $_.name -replace "old", "new&…

    other 2023年6月26日
    00
  • 实现core文件自动生成配置文件的方法

    实现Core文件自动生成配置文件的方法有以下步骤: 1. 确认系统支持coredump 要生成Core文件,需要确认系统已经打开了生成Core文件的权限。可以通过以下方式查看: ulimit -a 如果core file size显示为0,则需要修改设置: ulimit -c unlimited 2. 确认系统生成了Core文件 当程序崩溃时,会生成Core…

    other 2023年6月25日
    00
  • Spring Boot优化后启动速度快到飞起技巧示例

    请听我讲解关于Spring Boot优化启动速度的攻略。为了提高Spring Boot的启动速度,我们可以采取以下技巧: 减少启动时的I/O操作 在Spring Boot应用启动过程中,会扫描并加载大量的类、属性配置文件等资源。而这些资源的读取都会产生I/O操作,从而影响启动速度。为了减少I/O操作,我们可以通过以下方式进行优化: 使用spring-boot…

    other 2023年6月20日
    00
  • Win10 10130系统右键菜单中无属性项怎么办?

    Win10 10130系统右键菜单中无属性项 – 解决攻略 如果你在使用Win10 10130系统时发现右键菜单中没有“属性”项,应该按照以下步骤进行解决。 步骤1:检查文件夹选项 首先,我们需要检查文件夹选项中是否启用了“显示属性选项卡”选项。可以按下面的步骤进行检查: 打开“文件资源管理器”; 点击“查看”选项卡; 点击“选项”按钮; 点击“更改文件和文…

    other 2023年6月27日
    00
  • xmanager5图文使用教程

    Xmanager 5 图文使用教程 Xmanager 5 是一款 Windows 系统下的高级 X 窗口服务器。使用 Xmanager 5 可以在 Windows 系统下远程连接 Linux/Unix 服务器并进行图形化操作,为 Linux/Unix 系统带来了更方便的远程管理方式。本文将为大家介绍 Xmanager 5 的使用方法,包括安装、配置及连接远程…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部