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日

相关文章

  • Winrar 右键解压菜单失效问题的解决思路分析

    下面是关于“Winrar 右键解压菜单失效问题的解决思路分析”的完整攻略。 问题描述 当我们在 Windows 系统中使用 Winrar 解压缩压缩包时,通常会在文件右键菜单中看到“解压到当前文件夹”等解压选项。但是,在某些情况下我们右键菜单中却无法看到这些选项,而只有“Winrar”或“打开方式”等选项。这种情况在 Win10 系统中更为常见。 解决思路 …

    other 2023年6月27日
    00
  • jshidden属性

    当然,我可以为您提供详细的“jshidden属性”的完整攻略,包括两个示例说明。 jshidden属性 在HTML中,jshidden属性用于隐藏元素使其在页面上不可见。在本教程中,将介绍jshidden属性的用法和示例。 语法 jshidden属性语法如下: <div jshidden></div> 示例 以下是两个示例,说明如何在…

    other 2023年5月7日
    00
  • c++11&14-STL要点汇总

    C++11 & 14-STL要点汇总 概述 STL(Standard Template Library)是C++标准库中的重要组成部分,其提供了丰富且高效的数据结构和算法,包括但不限于容器、迭代器、算法等。C++11和14标准引入了一系列新的特性及语法,使得STL更加强大和易用。 本文将对C++11和14-STL的新增内容进行汇总,包括但不限于: 容…

    other 2023年6月27日
    00
  • 织梦在导航栏下拉菜单中调用当前栏目子类的方法

    织梦在导航栏下拉菜单中调用当前栏目子类的方法,可以通过模板中的 PHP 代码实现。下面是一组完整的攻略步骤: 1. 查询当前栏目的子栏目 首先需要查询当前栏目的子栏目,可以使用织梦CMS内置的 GetCatName() 函数来获取当前栏目的名称,然后通过 GetOneNext() 函数获取当前栏目的第一个子栏目,再使用 GetCatList() 函数循环输出…

    other 2023年6月26日
    00
  • brew安装jdk

    以下是“Brew安装JDK”的完整攻略: Brew安装JDK Brew是Mac OS X下的包管理器,可以方便地安装和管理各种软件包。以下是使用Brew安装JDK详细步骤: 1. 安装Brew 首先,您需要安装Brew。您可以在Brew官方网站上找到安装Brew的详细步骤。 2. 搜索JDK 使用Brew搜索JDK。您可以使用以下命令: brew searc…

    other 2023年5月7日
    00
  • centos7添加/删除用户和用户组

    CentOS 7添加/删除用户和用户组的完整攻略 在CentOS 7中,添加/删除用户和用户组是管理系统用户的基本操作之一。本文将介绍如何在CentOS7中添加/删除用户和用户组,包括使用命令行和图形界面两种方式。在介绍每种方式时,将提供至两个示例说明。 添加用户和用户组 命令行方式 示例一:使用useradd命令添加用户 使用useradd命可以添加一个新…

    other 2023年5月9日
    00
  • 绝对正版的Office2007下载,微软原版迅雷下载地址

    很抱歉,我不能提供关于非法软件下载的信息或指导。我鼓励用户遵守法律和版权规定,只使用合法和正版的软件。如果您需要使用Microsoft Office,我建议您前往微软官方网站或授权的软件分销商购买正版软件。这样可以确保您获得安全、可靠且合法的软件,并享受到官方支持和更新。 如果您有任何其他关于合法软件或其他主题的问题,我将很乐意帮助您。

    other 2023年8月4日
    00
  • 电脑提示存储空间不足,无法处理此命令是什么原因?怎么解决?

    电脑提示存储空间不足,无法处理此命令的原因和解决方法 当电脑提示存储空间不足,无法处理此命令时,通常是由于硬盘或固态硬盘上的可用空间不足导致的。这可能会影响计算机的性能,并导致无法执行某些操作。以下是解决此问题的完整攻略: 1. 检查磁盘空间 首先,您需要检查计算机上的磁盘空间使用情况。您可以按照以下步骤进行操作: 打开资源管理器(Windows)或查看器(…

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