Java实现简单的socket通信教程

Java实现简单的socket通信教程

1. 什么是Socket

Socket是一种通讯机制,用于在不同进程之间传递数据,包括TCP/IP和UDP两种。Java提供了java.net包来实现Socket功能,可以方便地进行网络编程。

2. 实现Socket通信的步骤

  1. 建立服务端Socket对象;
  2. 监听客户端请求并接受连接请求;
  3. 建立客户端Socket对象并连接服务端;
  4. 在服务端和客户端之间进行数据传输。

3. 实现一个简单的Socket通信

3.1 服务端代码

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

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(8888);
            System.out.println("服务端已启动,等待连接...");
            Socket s = ss.accept();
            System.out.println("客户端已连接");
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String data = br.readLine();
            System.out.println("客户端发送的消息为:" + data);
            PrintWriter pw = new PrintWriter(s.getOutputStream());
            pw.println("服务端已接收到消息:" + data);
            pw.flush();
            s.close();
            ss.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.2 客户端代码

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

public class Client {
    public static void main(String[] args) {
        try {
            Socket s = new Socket("localhost", 8888);
            System.out.println("已连接到服务端");
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            PrintWriter pw = new PrintWriter(s.getOutputStream());
            pw.println("你好,服务端");
            pw.flush();
            String data = br.readLine();
            System.out.println("服务端的回复为:" + data);
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.3 运行结果

执行Server代码,输出

服务端已启动,等待连接...

执行Client代码,输出

已连接到服务端
服务端的回复为:服务端已接收到消息:你好,服务端

4. 实现多线程的Socket通信

如果服务端需要同时处理多个客户端请求,就需要使用多线程来实现Socket通信。

4.1 服务端代码

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

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(8888);

            while (true) {
                System.out.println("服务端已启动,等待连接...");
                Socket s = ss.accept();
                System.out.println("客户端已连接");
                Thread t = new Thread(new ClientHandler(s));
                t.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static class ClientHandler implements Runnable {
        private Socket s;

        public ClientHandler(Socket socket) {
            this.s = socket;
        }

        @Override
        public void run() {
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
                String data = br.readLine();
                System.out.println("客户端发送的消息为:" + data);
                PrintWriter pw = new PrintWriter(s.getOutputStream());
                pw.println("服务端已接收到消息:" + data);
                pw.flush();
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

4.2 客户端代码

客户端代码与3.2中的代码相同。

4.3 运行结果

启动Server代码后,多个客户端可以连接到服务端并进行通信。每个客户端的消息都会被服务端接收并回复。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现简单的socket通信教程 - Python技术站

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

相关文章

  • MyBatis动态SQL表达式详解

    MyBatis动态SQL是针对不同情况下需要根据不同条件动态调整SQL语句的需求而产生的一种功能,具有很强的灵活性和可读性。其中动态SQL表达式是实现动态SQL的关键,本文将解析MyBatis中动态SQL表达式的使用方法和一些示例。 什么是MyBatis动态SQL表达式 MyBatis动态SQL表达式一般用于编写可动态调整SQL的Mapper文件,可以根据不…

    Java 2023年5月19日
    00
  • Java异或技操作给任意的文件加密原理及使用详解

    Java异或技操作给任意的文件加密原理及使用详解 异或操作和其原理 异或操作(XOR)是一种二进制运算,将两个数的对应位进行比较,不同为1,相同为0。例如,对于8位二进制数10110101和01101110进行异或操作,得到11011011。 异或操作的原理在于其对于同一个数进行两次异或操作,其值不变。即 a xor b xor b = a。因此,可以借助异…

    Java 2023年5月26日
    00
  • SpringBoot与Spring之间的对比

    关于“SpringBoot与Spring之间的对比”的话题进行完整攻略,可以从以下几个方面进行讲解。 1. Spring和SpringBoot的定义和特点 首先,我们需要了解Spring和SpringBoot的定义和特点。 Spring是一个经典的开源Java框架,它主要应用于企业级应用的开发,提供了一系列的解决方案以适应复杂的应用需求,如IoC容器、AOP…

    Java 2023年5月15日
    00
  • Spring JPA 错题集解决案例

    下面我将为您详细讲解“Spring JPA 错题集解决案例”的完整攻略。 什么是Spring JPA Spring JPA是Spring Framework提供的一种ORM框架,它能够在应用程序和数据库之间建立映射,使得Java应用程序开发者可以不用手写JDBC代码,就能够轻松地访问和操作数据库,提高开发效率和代码质量。 什么是Spring JPA的错题集解…

    Java 2023年5月20日
    00
  • Java SpringBoot Validation用法案例详解

    这里是关于Java SpringBoot Validation用法的详细攻略。 什么是Java SpringBoot Validation Java SpringBoot Validation是一种用于验证表单输入数据的框架,能够确保数据的合法性和完整性。它能够自动完成JavaBean的数据验证,并且给出友好的错误提示信息。 如何使用Java SpringB…

    Java 2023年5月19日
    00
  • SpringBoot全局异常处理方式

    当我们使用SpringBoot开发应用程序时,难免会遇到各种异常,在没有对异常进行处理时,用户会得到一些看不懂或不能理解的提示信息,这对于用户来说是非常不友好的,所以我们需要设置全局异常处理方式来帮助用户更好地理解我们的应用程序。 以下是关于SpringBoot全局异常处理的完整攻略,包括两个示例: 1. 全局异常处理方式 在SpringBoot中,我们可以…

    Java 2023年5月19日
    00
  • Java实现银行账户管理子系统

    当我们实现一个银行账户管理子系统时,需要考虑以下几个方面: 功能需求 首先,需要明确子系统需要实现的功能需求: 新建账户:输入账户名和初始存款金额,系统会为该用户创建一个账户。 存款:输入账户名和存款金额,对该用户的账户进行存款操作。 取款:输入账户名和取款金额,对该用户的账户进行取款操作,如果余额不足则提示错误信息。 转账:输入源账户名、目标账户名和转账金…

    Java 2023年5月24日
    00
  • java按指定编码写入和读取文件内容的类分享

    下面我来详细讲解如何使用Java按指定编码写入和读取文件内容的类。 什么是编码? 在计算机中,所有的数据都是以二进制形式存储的,但是人类无法直接读懂所有的二进制数据。为了让计算机能够正确地识别和显示不同的文本,我们需要将文本数据按照一定的规则(即编码)转换为二进制数据存储。 常见的编码方式包括ASCII、Unicode、UTF-8等。每一种编码方式都有其特定…

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