Java Socket实现单线程通信的方法示例

下面我会针对“Java Socket实现单线程通信的方法示例”的攻略进行详细解答。

1. 什么是Java Socket

Java Socket是一种用于网络编程的API,它提供了简单、高效的网络通信方式,允许程序通过网络连接来进行数据传输。

2. Java Socket实现单线程通信的方法

2.1 创建服务器

下面是一个简单的Java Socket服务器实现:

import java.net.*;
import java.io.*;

public class Server {
    private ServerSocket serverSocket;

    public Server(int port) throws IOException {
        serverSocket = new ServerSocket(port);
    }

    public void run() {
        while(true) {
            try {
                Socket socket = serverSocket.accept();
                DataInputStream in = new DataInputStream(socket.getInputStream());
                System.out.println(in.readUTF());
                DataOutputStream out = new DataOutputStream(socket.getOutputStream());
                out.writeUTF("Thx for ur connection!");
                socket.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        Server server = new Server(8888);
        server.run();
    }
}

以上代码中,首先创建了一个ServerSocket对象用于监听来自客户端的连接请求。当有客户端连接时,服务器会获取对应的输入流和输出流,然后进行通信。数据传输使用DataInputStreamDataOutputStream进行,这两个类经过封装可以很方便地进行数据读写操作。

2.2 创建客户端

下面是一个简单的Java Socket客户端:

import java.net.*;
import java.io.*;

public class Client {
    private Socket socket;

    public Client(String ip, int port) throws IOException {
        socket = new Socket(ip, port);
    }

    public void run() {
        try {
            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
            out.writeUTF("Hello from " + socket.getLocalSocketAddress());
            DataInputStream in = new DataInputStream(socket.getInputStream());
            System.out.println(in.readUTF());
            socket.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        Client client = new Client("localhost", 8888);
        client.run();
    }
}

以上代码中,首先创建了一个Socket对象用于连接指定的服务器。连接成功后,客户端会获取对应的输入流和输出流,然后进行通信。数据传输也是使用DataInputStreamDataOutputStream进行,这两个类经过封装可以很方便地进行数据读写操作。

3. 程序的运行流程

  1. 先运行服务器程序,它会监听8888端口来接收来自客户端的请求。
  2. 运行客户端程序,它会向服务器8888端口发送一条消息。
  3. 服务器接收到客户端发送的消息后,会在控制台上输出消息内容,并向客户端发送一条回复消息。
  4. 客户端接收到服务器发送的回复消息后,在控制台上输出消息内容。
  5. 连接结束后,服务器和客户端都会关闭连接。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Socket实现单线程通信的方法示例 - Python技术站

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

相关文章

  • java8、jdk8日期转化成字符串详解

    Java 8/JDK 8 日期转化成字符串详解 在 Java 8/JDK 8 中,我们有多种选择将日期转化成字符串。本篇文章将会详细讲解一些转化日期的方法。 SimpleDateFormat SimpleDateFormat 是 Java 中一个比较常见的日期格式化工具。使用 SimpleDateFormat 可以将 Date 对象格式化成字符串,也可以将字…

    Java 2023年5月20日
    00
  • JAVA线程sleep()和wait()详解及实例

    JAVA线程sleep()和wait()详解及实例 简介 Java中的线程是轻量级的,同时也是一种几乎可以同时执行多个任务的机制。线程具有并发执行的能力,可以实现复杂的并发操作。线程的任何操作都需要以某种方式调度,由操作系统或JVM负责分配资源,因此线程通常比进程更高效。本文将重点介绍Java线程中的sleep()和wait()方法。 sleep()方法 s…

    Java 2023年5月20日
    00
  • 如何使用对象终结器?

    当对象的生命周期结束时,需要清理一些资源,如关闭文件、释放内存等。在C#中,可以使用对象终结器(finalizer)来实现删除对象之前清理所有相关资源的操作。本文将详细讲解如何使用对象终结器。 什么是对象终结器? 对象终结器是.NET框架提供的一种方法,用于确保对象的资源在对象生命周期结束时被释放。通常情况下,框架会自动进行垃圾回收,但是在某些情况下,需要手…

    Java 2023年5月11日
    00
  • 通过agent判断浏览器版本救命分享

    针对“通过agent判断浏览器版本救命分享”这个话题,我们可以编写一篇完整攻略。攻略如下: 通过agent判断浏览器版本救命分享 什么是agent 在HTTP请求头中,有一个User-Agent字段,可以用来识别发起HTTP请求的客户端软件信息,这个字段就被称作“agent”或者“User-Agent”。 浏览器也会通过该字段告诉服务器它的信息,如浏览器名称…

    Java 2023年6月16日
    00
  • JSP中的倒数计时和自动跳转页面

    关于JSP中的倒数计时和自动跳转页面,我来为您详细讲解一下。 倒数计时 在JSP页面中实现倒数计时,可以使用JavaScript来完成。具体步骤如下: 步骤一:在JSP页面上引入JavaScript代码 <script type="text/javascript"> </script> 步骤二:通过JavaScri…

    Java 2023年6月15日
    00
  • java springmvc乱码解决归纳整理详解

    Java Spring MVC 是一种非常流行的 Java Web 开发框架。它提供了许多特性和强大的功能,但是在处理中文文本等需要编码转换的场景中,往往会遇到乱码问题。本篇攻略将详细讲解如何解决 Java Spring MVC 中的乱码问题。 1. 请求编码解决 一般情况下,在处理 HTTP 请求时,浏览器会设置请求的编码格式。但是如果请求头中没有指定编码…

    Java 2023年5月20日
    00
  • synchronized关键字的作用是什么?

    当多个线程共同访问共享变量时,可能会出现数据竞争(数据不一致)的问题。为了避免这种情况发生,java提供了synchronized关键字来同步多个线程对共享变量的访问。synchronized可以修饰方法、代码块、静态方法、静态代码块等。 其主要作用是确保在同一时刻只有一个线程可以执行同步代码块或同步方法,其他线程必须等待锁的释放才能继续执行。 当一个线程尝…

    Java 2023年5月10日
    00
  • Spring动态注册多数据源的实现方法

    下面为您详细讲解“Spring动态注册多数据源的实现方法”的完整攻略。 1. 前言 在实际开发中,我们常常会遇到需要使用多个数据源的情况,而且这些数据源可能会在程序运行过程中动态变化。比如说,有些系统会支持多租户,每个租户对应一个数据库,而且租户的数量是不固定的。这种情况下,我们就需要动态注册多个数据源,并在运行时根据需要选择合适的数据源。 Spring提供…

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