Java实现基于TCP的通讯程序实例解析

Java实现基于TCP的通讯程序实例解析

本文将详细讲解如何使用Java实现基于TCP的通讯程序。

环境准备

首先,你需要安装Java开发环境(JDK或者OpenJDK)。建议选择较新版本,以确保兼容性和安全性。

代码实现

1. 服务端代码实现

服务端首先需要创建一个ServerSocket对象,指定服务器的端口号。然后通过ServerSocket对象的accept()方法等待客户端的连接。一旦有连接请求,accept()方法就会返回一个Socket对象,服务端就可以通过Socket对象与客户端进行通讯。

以下是服务端的代码示例:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {

    public static void main(String[] args) throws IOException {

        // 创建一个ServerSocket对象
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务端已启动,等待客户端连接...");

        // 等待客户端的连接
        Socket socket = serverSocket.accept();
        System.out.println("客户端已连接!");

        // 接收客户端发送的数据
        InputStream is = socket.getInputStream();
        byte[] buffer = new byte[1024];
        int len;
        len = is.read(buffer);
        String data = new String(buffer, 0, len);
        System.out.println("客户端消息:" + data);

        // 向客户端发送响应数据
        OutputStream os = socket.getOutputStream();
        String responseData = "Hello, Client!";
        os.write(responseData.getBytes());
        System.out.println("服务端已向客户端发送:" + responseData);

        // 关闭资源
        os.close();
        is.close();
        socket.close();
        serverSocket.close();
    }
}

2. 客户端代码实现

客户端需要先创建一个Socket对象,并指定服务端的IP地址和端口号。然后通过Socket对象与服务端进行通讯。

以下是客户端的代码示例:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {

    public static void main(String[] args) throws IOException {

        // 创建一个Socket对象,并指定服务端的IP地址和端口号
        Socket socket = new Socket("127.0.0.1", 8888);
        System.out.println("已连接到服务器!");

        // 向服务端发送数据
        OutputStream os = socket.getOutputStream();
        String data = "Hello, Server!";
        os.write(data.getBytes());
        System.out.println("客户端已发送消息:" + data);

        // 接收服务端的响应数据
        InputStream is = socket.getInputStream();
        byte[] buffer = new byte[1024];
        int len;
        len = is.read(buffer);
        String responseData = new String(buffer, 0, len);
        System.out.println("服务端消息:" + responseData);

        // 关闭资源
        is.close();
        os.close();
        socket.close();
    }
}

示例说明

示例一:发送文件

以下示例演示了如何使用Java实现向服务端发送文件:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {

    public static void main(String[] args) throws IOException {

        Socket socket = new Socket("127.0.0.1", 8888);
        File file = new File("example.txt");

        // 向服务端发送文件
        OutputStream os = socket.getOutputStream();
        FileInputStream fis = new FileInputStream(file);
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            os.write(buffer, 0, len);
        }
        System.out.println("文件发送成功!");

        // 关闭资源
        fis.close();
        os.close();
        socket.close();
    }
}

public class TCPServer {

    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket = new ServerSocket(8888);
        Socket accept = serverSocket.accept();

        // 接收文件
        InputStream is = accept.getInputStream();
        File file = new File("example.txt");
        FileOutputStream fos = new FileOutputStream(file);
        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }
        System.out.println("文件接收成功!");

        // 关闭资源
        fos.close();
        is.close();
        accept.close();
        serverSocket.close();
    }
}

示例二:多线程服务端

以下示例演示了如何使用Java实现多线程的服务端,可以同时处理多个客户端的连接请求。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {

    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务端已启动,等待客户端连接...");

        while (true) {
            // 等待客户端的连接
            Socket accept = serverSocket.accept();
            System.out.println("客户端已连接!");

            // 新建线程处理客户端请求
            new Thread(() -> {
                try {
                    // 接收客户端发送的数据
                    InputStream is = accept.getInputStream();
                    byte[] buffer = new byte[1024];
                    int len;
                    len = is.read(buffer);
                    String data = new String(buffer, 0, len);
                    System.out.println("客户端消息:" + data);

                    // 向客户端发送响应数据
                    OutputStream os = accept.getOutputStream();
                    String responseData = "Hello, Client!";
                    os.write(responseData.getBytes());
                    System.out.println("服务端已向客户端发送:" + responseData);

                    // 关闭资源
                    os.close();
                    is.close();
                    accept.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现基于TCP的通讯程序实例解析 - Python技术站

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

相关文章

  • vue项目配置env的方法步骤

    Vue项目配置.env文件主要是为了在开发和生产阶段,动态地管理不同的环境变量。比如开发人员在开发阶段,需要连接到本地开发的服务器,而在生产环境下则需要连接到生产服务器。 下面是Vue项目配置.env的步骤: 在项目根目录下,创建.env文件和.env.development文件和.env.production文件。 在.env.development和.e…

    other 2023年6月27日
    00
  • SpringBoot项目启动时如何读取配置以及初始化资源

    要让SpringBoot项目在启动时读取配置以及初始化资源,可以采用以下两种方法: 通过@Configuration注解的类来配置 在SpringBoot项目中,可以使用@Configuration注解来指定一个类为配置类,这个类中可以定义Bean和配置信息。在配置类中,可以使用@Bean注解定义Bean,也可以使用@Value注解来读取配置信息。在这个类中…

    other 2023年6月20日
    00
  • Android中编写属性动画PropertyAnimation的进阶实例

    Android中编写属性动画PropertyAnimation的进阶实例攻略 属性动画(Property Animation)是Android中一种强大的动画机制,可以对任意对象的属性进行动画操作。本攻略将详细讲解如何在Android中编写属性动画的进阶实例。 步骤一:导入属性动画库 首先,需要在项目的build.gradle文件中添加属性动画库的依赖: d…

    other 2023年9月7日
    00
  • 浅谈vue加载优化策略

    浅谈Vue加载优化策略 在 Vue 中进行页面开发时,随着功能的增加,引入的代码也越来越多,这就会导致页面加载速度变慢,影响用户体验。因此,对 Vue 的加载优化具有重要意义。下面我们将从三个方面介绍 Vue 加载优化策略。 按需引入第三方组件库 在 Vue 项目中,如果我们使用的第三方组件库过于庞大,那么在项目中引用这个组件库的时候就会出现页面加载很慢的问…

    other 2023年6月27日
    00
  • IP安全策略限制IP进入远程桌面设置方法

    IP安全策略限制IP进入远程桌面设置方法攻略 远程桌面是一种方便的远程访问工具,但为了确保安全性,我们可以通过设置IP安全策略来限制允许访问远程桌面的IP地址。下面是详细的设置方法攻略: 步骤一:打开“远程桌面设置” 首先,我们需要打开“远程桌面设置”来配置IP安全策略。按照以下步骤进行操作: 打开“开始”菜单,搜索并选择“远程桌面设置”。 在弹出的窗口中,…

    other 2023年7月31日
    00
  • AngularJS入门心得之directive和controller通信过程

    当然!下面是关于\”AngularJS入门心得之directive和controller通信过程\”的完整攻略,包含两个示例说明。 directive和controller通信过程 在AngularJS中,directive和controller之间的通信可以通过多种方式实现。下面是一种常见的通信方式: 在directive中使用require选项:在dir…

    other 2023年8月20日
    00
  • Win10手动设置强大右键菜单的技巧

    下面是详细讲解“Win10手动设置强大右键菜单的技巧”的完整攻略: 1. 确定需求和目标 在进行任何技巧设置前,首先需要确定自己的需求和目标。比如说,我们需要对常用的文档类型(如PDF、Word等)设置右键菜单,快速打开或编辑文档,提升工作效率。因此,我们需要针对这个需求,进行后续的设置。 2. 寻找并打开注册表编辑器 右键菜单的设置需要进行一些系统级别的操…

    other 2023年6月27日
    00
  • python爬虫万能代码-最精简的爬虫

    以下是“python爬虫万能代码-最精简的爬虫”的完整攻略: 1. 导入必要的库 首先,我们需要导入必要的库。这个例子中,我们需要使用requests库和BeautifulSoup库。可以使用以下代码导入这些库: import requests from bs4 import BeautifulSoup 2. 发送请求并解析HTML 接下来,我们需要发送请求…

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