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

yizhihongxing

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 中使用print.js导出pdf操作

    下面是详细讲解 “Vue 中使用 print.js 导出 PDF 操作” 的完整攻略: 一、什么是 Print.js Print.js 是一个简单的打印插件,可以让你轻松地打印任何元素。不需要额外的 CSS,只需要调用它的 JavaScript 函数即可。此外,它还支持导出为 PDF 格式。 二、安装 Print.js 你可以使用 npm 或直接在 HTML…

    Vue 2023年5月27日
    00
  • 深入理解Vue父子组件生命周期执行顺序及钩子函数

    下面是“深入理解Vue父子组件生命周期执行顺序及钩子函数”的完整攻略: 什么是Vue组件生命周期? Vue组件是Vue.js中最重要的概念之一。一个Vue组件可以看作是一个拥有预定义选项的Vue实例。与Vue实例一样,Vue组件也有它们自己的生命周期。Vue组件的生命周期包括创建、挂载、更新和销毁四个阶段。 为了更好地理解Vue组件生命周期,我们需要明确每个…

    Vue 2023年5月28日
    00
  • vue3配置全局参数(挂载全局方法)以及组件的使用

    下面是关于Vue 3中全局参数和组件的使用的攻略。 全局参数 1. 挂载全局方法 在Vue 3中,我们可以使用app.config.globalProperties来挂载全局方法,这个对象中的所有属性都会被添加到应用程序的实例中,并且可以在模板和实例方法中直接使用。例如: import { createApp } from ‘vue’; const app …

    Vue 2023年5月28日
    00
  • vue中Promise的使用方法详情

    下面是关于“Vue中Promise的使用方法详情”的攻略。 什么是Promise Promise是ES6中新增的一种全新的异步开发处理方式,可以简化代码编写和调试。 Promise可以将原本异步回调的方式,改为链式操作,提高代码的可读性和可维护性。 Promise是一个容器,可以异步返回一个值或抛出一个异常。Promise有三种状态:pending(等待中)…

    Vue 2023年5月28日
    00
  • vue关于重置表单数据出现undefined的解决

    关于重置表单数据出现undefined的问题,我们可以进行如下的解决方式: 问题原因 首先,我们需要明确这个问题的原因。在 Vue 中,我们重置表单数据通常使用 Object.assign 或者展开操作符 … 来将一个空对象里的数据覆盖当前表单组件里的数据。常见代码如下: // resetFormData 方法里重置formData数据 resetFor…

    Vue 2023年5月27日
    00
  • 一起写一个即插即用的Vue Loading插件实现

    下面是“一起写一个即插即用的Vue Loading插件实现”的完整攻略。 确定插件的使用方式和效果 首先要确定我们的插件要如何使用以及要实现的效果。在这个过程中,需要考虑以下几个方面: 插件的使用方式:Vue插件可以通过 Vue.use() 方法进行安装,因此我们需要确定插件的安装方式和参数。 插件的效果:我们的Vue Loading插件需要实现的效果是,在…

    Vue 2023年5月29日
    00
  • antfu大佬的v-lazy-show教我学会了怎么编译模板指令

    下面是详细讲解“antfu大佬的v-lazy-show教我学会了怎么编译模板指令”的完整攻略。 什么是v-lazy-show指令? v-lazy-show是一个自定义指令,它可以让我们实现懒加载元素的显示。在元素位于可视区域附近时,该元素会被显示出来。这个指令是由antfu大佬开发的,它的主要思路就是通过Intersection Observer API实现…

    Vue 2023年5月28日
    00
  • Vue新手指南之创建第一个vue-cli脚手架程序

    下面是完整的攻略。 准备工作 在开始创建vue-cli脚手架程序之前,需要确保已经安装了以下几个工具: Node.js:Vue框架基于Node.js运行,因此需要先安装Node.js(建议安装LTS版本) npm:Node.js自带的包管理工具,也是Vue框架所依赖的包管理工具。一般情况下,安装Node.js之后npm也会一并安装。 创建项目 第一步,打开命…

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