Java TCP协议通信超详细讲解

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日

相关文章

  • Zabbix监控Linux主机设置方法

    Zabbix监控Linux主机设置方法 1. 安装Zabbix Agent 在Linux主机上安装Zabbix Agent,方法可以参考官方文档: Zabbix Agent安装指南(官方文档) 以Ubuntu为例,可以通过以下命令进行安装: sudo apt-get update sudo apt-get install zabbix-agent 2. 配置…

    other 2023年6月27日
    00
  • ListCtrl接受拖动文件

    在Web开发中,有时需要实现拖拽文件上传的功能。本文将详细讲解如何使用ListCtrl接受拖动文件,并提供两个示例说明。 方法一:使用HTML5的拖放API HTML5的拖放API提供了一种简单的方法来实现拖拽文件上传的功能。下面是一个使用HTML5的拖放API的示例: <!DOCTYPE html> <html> <head&…

    other 2023年5月5日
    00
  • 织梦dedecms 本地模板安装图文方法

    关于“织梦dedecms 本地模板安装图文方法”的完整攻略,我将分步骤进行讲解,并提供两个示例说明。 步骤1:下载模板 在安装模板之前,首先需要下载所需要的模板。可以在官方网站上下载,也可以在第三方网站上下载,需要注意的是,下载的模板文件必须是zip压缩格式。 步骤2:解压缩模板文件 将下载的zip压缩文件解压缩,可以使用压缩软件,比如WinRAR等。解压缩…

    other 2023年6月27日
    00
  • Mysql 5.7 忘记root密码或重置密码的详细方法

    这里介绍Mysql 5.7忘记root密码或重置密码的详细方法。 环境准备 在执行重置密码的过程中,需要满足以下前提: 拥有对服务器的管理权限 确定MySQL版本,在本文中使用的是MySQL 5.7 步骤 停止MySQL服务 首先,需要停止MySQL服务,以便能够在没有其他进程在使用数据目录时进行重置密码。在Ubuntu Linux操作系统上,可以使用以下命…

    other 2023年6月27日
    00
  • git切换远程分支

    下面是关于如何切换远程分支的详细攻略。 1. 查看远程分支 在切换远程分支之前,需要先查看已有的远程分支。可以使用以下命令查看: git branch -r 其中,”r”代表”remote”,表示查看远程分支。执行该命令后,会列出当前仓库连接的所有远程分支。 2. 切换远程分支 在上一步中查看到远程分支之后,就可以使用以下命令来切换到需要操作的远程分支: g…

    其他 2023年4月16日
    00
  • Linux应用程序使用写文件调试程序的方法

    当 Linux 应用程序出现问题时,我们通常需要进行调试处理。其中一种处理方式就是写文件记录程序运行时的细节信息以进一步进行分析。下面是使用写文件调试程序的方法的完整攻略: 1. 创建文件 首先需要创建一份记录细节信息的文件,我们可以使用 fopen() 函数来创建文件并返回文件指针。如下所示,新建一个 debug.log 记录文件: FILE *fp; f…

    other 2023年6月25日
    00
  • html2canvas生成的图片偏移不完整的解决方法

    下面是详细讲解“html2canvas生成的图片偏移不完整的解决方法”的完整攻略: 问题描述 在使用html2canvas进行网页截图时,有时会出现截图偏移、不完整的情况,这个问题通常是由于网页中存在定位、层叠、溢出等样式导致的。 解决方法 一、增加canvas的width和height html2canvas截图时,会将整个网页转化为一张canvas图片。…

    other 2023年6月27日
    00
  • 鸢尾花(iris)数据集

    鸢尾花数据集(Iris Dataset)攻略 鸢尾花数据集是机器学习领域中最常用的数据集之一,由英国统计学家Ronald Fisher于6年收集整理。该数据集包含了150个样本,每个样本包含了鸢尾的4个特征:花萼长度(pal length)、花萼宽度(sepal width)、花瓣长度(petal length)和花瓣宽度(petal width),以及它们…

    other 2023年5月7日
    00
合作推广
合作推广
分享本页
返回顶部