java Tcp通信客户端与服务器端实例

Java Tcp通信是一种基于TCP协议的客户端与服务器端的通信方式。Java语言中提供了相应的API,可以方便地进行TCP通信。本文将详细介绍Java Tcp通信的使用方法,并提供两个简单的示例。

1. Java Tcp通信的基本概念

Java Tcp通信需要了解以下基本概念:

  • 服务器端:提供服务程序的一方。服务器程序具有独立运行的能力,等待客户端的连接请求。
  • 客户端:请求服务程序的一方。客户端程序需要通过网络连接到服务器程序,并发送请求获取服务。
  • 端口号:用于标识通信端口的数字。

2. Java Tcp通信的基本步骤

Java Tcp通信的基本步骤如下:

2.1 创建服务器端程序

  • 创建一个ServerSocket对象,并指定端口号。
  • 调用ServerSocket对象的accept()方法,等待客户端的连接请求。
  • 如果有客户端连接请求,accept()方法会返回一个Socket对象,可以通过Socket对象获取到客户端的输入流和输出流。

2.2 创建客户端程序

  • 创建一个Socket对象,并指定服务器的主机名和端口号。
  • 通过Socket对象获取到服务器的输入流和输出流,可以通过输出流向服务器发送请求,通过输入流获取到服务器的响应。

2.3 进行通信

  • 客户端向服务器发送请求。
  • 服务器接收到请求后,处理请求并返回响应。
  • 客户端接收到响应后,进行处理。

3. Java Tcp通信示例

以下是两个Java Tcp通信的简单示例:

3.1 服务器端示例

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

public class TcpServerExample {
    public static void main(String[] args) throws IOException {
        // 创建ServerSocket对象,并指定端口号
        int port = 8888;
        ServerSocket serverSocket = new ServerSocket(port);

        System.out.println("等待客户端连接...");

        while (true) {
            // 等待客户端连接请求
            Socket socket = serverSocket.accept();

            // 处理连接请求,新建线程处理
            Thread thread = new Thread(new SocketHandler(socket));
            thread.start();
        }
    }
}

class SocketHandler implements Runnable {
    private Socket socket;

    public SocketHandler(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            System.out.println("客户端" + socket.getRemoteSocketAddress() + "已连接");

            // 获取到客户端的输入流和输出流
            InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream();

            // 读取客户端发送的数据,并进行处理
            byte[] buffer = new byte[1024];
            int len;
            while ((len = inputStream.read(buffer)) != -1) {
                String message = new String(buffer, 0, len);
                System.out.println("收到客户端" + socket.getRemoteSocketAddress() + "发送的消息:" + message);

                // 给客户端回应
                outputStream.write("已收到您的消息".getBytes());
                outputStream.flush();
            }

            // 关闭流和Socket
            inputStream.close();
            outputStream.close();
            socket.close();
            System.out.println("客户端" + socket.getRemoteSocketAddress() + "已断开连接");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.2 客户端示例

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

public class TcpClientExample {
    public static void main(String[] args) throws IOException {
        // 创建Socket对象,并指定服务器的主机名和端口号
        String hostname = "localhost";
        int port = 8888;
        Socket socket = new Socket(hostname, port);

        System.out.println("已连接到服务器" + socket.getRemoteSocketAddress());

        // 获取到服务器的输入流和输出流
        InputStream inputStream = socket.getInputStream();
        OutputStream outputStream = socket.getOutputStream();

        // 向服务器发送请求
        String request = "您好,服务器!";
        outputStream.write(request.getBytes());
        outputStream.flush();
        System.out.println("向服务器发送请求:" + request);

        // 读取服务器的响应
        byte[] buffer = new byte[1024];
        int len;
        while((len = inputStream.read(buffer)) != -1) {
            String response = new String(buffer, 0, len);
            System.out.println("收到服务器的响应:" + response);
        }

        // 关闭流和Socket
        inputStream.close();
        outputStream.close();
        socket.close();
        System.out.println("已断开与服务器的连接");
    }
}

以上就是Java Tcp通信客户端与服务器端实例的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java Tcp通信客户端与服务器端实例 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 浅谈Vue组件单元测试究竟测试什么

    浅谈Vue组件单元测试究竟测试什么 在进行Vue组件单元测试时,我们主要测试以下方面: 1. 组件的行为是否正确 组件的行为包括用户交互和事件响应机制。我们可以使用Jest和 vue-test-utils库对组件进行测试,以便确保它们在视觉上展现正确,并能检查它们是否正确地响应用户行为和事件。 例如,以下代码对一个简单的Vue组件进行了测试,该组件接收一个数…

    Vue 2023年5月28日
    00
  • Vite3迁移Webpack5的实现

    关于“Vite3迁移Webpack5的实现”的完整攻略,我将会从以下几个方面进行详细讲解: 什么是Vite3和Webpack5? 为什么要迁移Vite3到Webpack5? Vite3迁移Webpack5的实现步骤 示例说明 1. 什么是Vite3和Webpack5? Vite3是一个基于ESM的快速开发构建工具,专注于提供基于浏览器原生ES模块系统的开发体…

    Vue 2023年5月28日
    00
  • Vue组件和Route的生命周期实例详解

    Vue组件和Route的生命周期是Vue.js框架中非常重要的概念。在Vue.js开发中,生命周期指 Vue实例从创建到销毁的整个过程, Vue实例在这个过程中会自动执行一些方法,这些方法被称为生命周期钩子函数,这些函数可以帮助我们在不同的阶段进行操作。 在Vue Router中,我们经常需要用到Route的生命周期。Route的生命周期指的是当一个路由被匹…

    Vue 2023年5月27日
    00
  • Vue 中获取当前时间并实时刷新的实现代码

    现在我将为你分享如何在 Vue 中获取当前时间并实时刷新的实现代码。 准备工作 在进行代码实现之前,我们需要先了解一下 Vue.js 和 moment.js。Vue.js 是一款渐进式的 JavaScript 框架,而 moment.js 则是一个解析、检验、操作和显示日期时间的 JavaScript 库。安装 Vue.js 和 moment.js 以后,我…

    Vue 2023年5月29日
    00
  • Vue使用$set和$delete操作对象属性

    在Vue中,使用$set和$delete方法可以操作对象属性。有时候,我们需要动态地添加一个属性到一个已经存在的对象上或删除对象中的某一个属性。默认情况下,Vue无法检测到对象属性的变化,因为Vue只能检测到对象已经存在的属性的变化。但如果使用$set和$delete方法来改变对象属性,Vue就可以监听到属性的变化并动态更新视图。 1. $set操作对象属性…

    Vue 2023年5月28日
    00
  • vuex中getters的基本用法解读

    下面就让我为你详细讲解“vuex中getters的基本用法解读”的完整攻略。 什么是Vuex中的Getters 在Vuex中,Getters是一个状态的派生属性,可以将多个状态组合成一个属性。Getters有点类似于Vue组件中的计算属性,只不过它是针对Vuex中的状态而言的。 Getters的基本用法 在Vuex中,可以通过store对象上的getters…

    Vue 2023年5月28日
    00
  • 解决Babylon.js中AudioContext was not allowed to start异常问题

    在Babylon.js中播放音频时,有时会出现 “AudioContext was not allowed to start” 异常。这是由于浏览器启用了自动播放策略,导致无法正常启动AudioContext造成的。解决方法是在用户的交互行为中启动AudioContext。下面是解决这个问题的完整攻略: 1. 检查浏览器设置 首先,我们需要检查浏览器的设置,…

    Vue 2023年5月28日
    00
  • Vue判断字符串(或数组)中是否包含某个元素的多种方法

    关于Vue中判断字符串或数组中是否包含某个元素的方法主要有以下几种方式: 字符串判断 includes ES6中新增了字符串方法includes,它返回一个布尔值,表示当前字符串是否包含传入的字符或字符串。 const str = ‘hello world’ console.log(str.includes(‘he’)) // true console.lo…

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