java中TCP实现回显服务器及客户端

Java中TCP实现回显服务器及客户端的步骤如下:

1. 编写服务器端程序

服务器端需要完成以下任务:

  1. 创建ServerSocket对象
ServerSocket serverSocket = new ServerSocket(8888);
  1. 监听客户端的连接请求
Socket socket = serverSocket.accept();
  1. 读取客户端发送的数据
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
  1. 回显客户端发送的数据
OutputStream outputStream = socket.getOutputStream();
outputStream.write(buffer, 0, len);
outputStream.flush();

完整代码如下:

public class EchoServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("EchoServer started.");

        Socket socket = serverSocket.accept();
        System.out.println("Accepted connection.");

        InputStream inputStream = socket.getInputStream();
        byte[] buffer = new byte[1024];
        int len = inputStream.read(buffer);
        System.out.println("Received message: " + new String(buffer, 0, len));

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write(buffer, 0, len);
        outputStream.flush();

        System.out.println("EchoServer stopped.");
        socket.close();
        serverSocket.close();
    }
}

2. 编写客户端程序

客户端需要完成以下任务:

  1. 创建Socket对象,连接服务器
Socket socket = new Socket("localhost", 8888);
  1. 向服务器发送数据
OutputStream outputStream = socket.getOutputStream();
outputStream.write("Hello, EchoServer!".getBytes());
outputStream.flush();
  1. 读取服务器回显的数据
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
System.out.println("Received message: " + new String(buffer, 0, len));

完整代码如下:

public class EchoClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8888);

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("Hello, EchoServer!".getBytes());
        outputStream.flush();
        System.out.println("Sent message: Hello, EchoServer!");

        InputStream inputStream = socket.getInputStream();
        byte[] buffer = new byte[1024];
        int len = inputStream.read(buffer);
        System.out.println("Received message: " + new String(buffer, 0, len));

        socket.close();
    }
}

3. 示例说明

以下是一个简单的示例,演示了如何使用Java Socket API实现回显服务器:

// EchoServer.java
public class EchoServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("EchoServer started.");

        Socket socket = serverSocket.accept();
        System.out.println("Accepted connection.");

        InputStream inputStream = socket.getInputStream();
        byte[] buffer = new byte[1024];
        int len = inputStream.read(buffer);
        System.out.println("Received message: " + new String(buffer, 0, len));

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write(buffer, 0, len);
        outputStream.flush();

        System.out.println("EchoServer stopped.");
        socket.close();
        serverSocket.close();
    }
}
// EchoClient.java
public class EchoClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8888);

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("Hello, EchoServer!".getBytes());
        outputStream.flush();
        System.out.println("Sent message: Hello, EchoServer!");

        InputStream inputStream = socket.getInputStream();
        byte[] buffer = new byte[1024];
        int len = inputStream.read(buffer);
        System.out.println("Received message: " + new String(buffer, 0, len));

        socket.close();
    }
}

运行服务器端程序后,控制台输出如下:

EchoServer started.
Accepted connection.
Received message: Hello, EchoServer!
EchoServer stopped.

运行客户端程序后,控制台输出如下:

Sent message: Hello, EchoServer!
Received message: Hello, EchoServer!

说明服务器端成功地回显了客户端发送的数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java中TCP实现回显服务器及客户端 - Python技术站

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

相关文章

  • mysql去重的方法整理

    以下是“MySQL去重的方法整理”的完整攻略: 1. 去重的概念 在MySQL中,去重是指从查询结果中删除重复的行。当查询结果包含多个相同的行时,去重可以帮助我们只显示一次这些行,从而使查询结果更加简洁和易读。 2. MySQL去重的方法 MySQL提供了多种去重的方法,包括使用DISTINCT关键字、GROUP BY子句和HAVING子句等。下面分别介绍这…

    other 2023年5月8日
    00
  • 【python标准库模块一】时间模块time学习

    【Python标准库模块一】时间模块time学习的完整攻略 时间模块time是Python标准库中的一个重要模块,它提供了一些函数,用于处理时间和日期。本文将为您提供一份详细的时间模块time学习的完整攻略,包括时间模块time的基本概念、使用方法和两个示例说明。 时间模块time的基本概念 时间模块time是Python标准库中的一个模块,它提供了一些函数…

    other 2023年5月5日
    00
  • 微信为什么占好几个G的内存?清理微信占用内存的方法

    微信为什么占好几个G的内存? 微信占用大量内存的原因主要有以下几点: 聊天记录和媒体文件:微信保存了用户的聊天记录和接收的媒体文件,包括图片、视频、语音等。这些文件会占用大量的存储空间,尤其是当用户有大量聊天记录或频繁接收媒体文件时。 缓存数据:微信为了提高用户体验,会缓存一些数据,例如好友列表、公众号文章等。这些缓存数据也会占用一定的内存空间。 小程序和插…

    other 2023年8月2日
    00
  • JVM内存区域划分相关原理详解

    JVM内存区域划分相关原理详解 Java虚拟机(JVM)是Java程序的运行环境,它将程序的执行过程抽象为一组内存区域。这些内存区域的划分对于Java程序的性能和内存管理至关重要。本攻略将详细讲解JVM内存区域划分的相关原理。 JVM内存区域划分 JVM内存区域划分主要包括以下几个部分: 程序计数器(Program Counter):程序计数器是一块较小的内…

    other 2023年8月2日
    00
  • mybatis中insert返回值为1,但数据库却没有数据

    MyBatis中insert返回值为1,但数据库却没有数据的解决方法攻略 有时候在使用MyBatis进行数据插入操作时,可能会遇到返回值为1,但实际数据库中却没有插入数据的情况。以下是解决这个问题的完整攻略: 检查数据库连接是否正常:首先,确保数据库连接正常,可以通过连接数据库的其他方式进行验证。 检查数据源配置:确认MyBatis的数据源配置是否正确,包括…

    other 2023年10月18日
    00
  • 提高Laravel应用性能方法详解

    完整攻略:提高Laravel应用性能方法详解 1. 代码优化 1.1 优化数据库查询 Laravel中的数据库查询有非常方便的ORM操作,但是如果使用不当,就会影响性能。常见的优化方法有: 使用索引:根据应用场景添加字段索引,避免全表扫描,提高查询效率。 减少查询字段:只查询所需字段,避免不必要的数据传输。如使用select()方法指定需要查询的字段。 批量…

    other 2023年6月26日
    00
  • 前端算法题解leetcode114二叉树展开为链表

    关于前端算法题解leetcode114二叉树展开为链表,我给出完整的攻略如下: 问题概述 给定一个二叉树,原地将它展开为一个单链表。其中,展开后的单链表应该符合如下要求: 单链表的右节点指针为原先的二叉树中序遍历的后继节点。 单链表的左节点应该为空(因为右节点指针已经代替了左右子树指针)。 例如,给定如下二叉树: 1 / \ 2 5 / \ \ 3 4 6 …

    other 2023年6月27日
    00
  • r-在数据框中的多列上使用shapiro.test

    以下是在数据框中的多列上使用shapiro.test的完整攻略: 1. 安装R 首先,我们需要安装R。可以在以下链接中下载: The R Project for](https://www.r-project.org/) 选择适合您系统的版本进行下载。下载完成后,照提示进行安装。 2 加载数据在R中,我们可以使用read.csv()函数加载数据框。例如,我们可…

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