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日

相关文章

  • Java超详细讲解类的继承

    Java超详细讲解类的继承 什么是类的继承 类的继承是一种面向对象编程语言中非常重要的概念。它允许子类(派生类)继承父类(超类)的公有方法和属性,这样子类就可以重用父类的代码,同时还可以扩展父类的功能。 为什么要使用类的继承 使用类的继承有以下几个优点: 代码重用:子类可以继承父类中的方法和属性,从而减少代码量,提高代码的重用性。 细节隐藏:子类不能访问父类…

    Java 2023年5月26日
    00
  • Java下载文件的四种方式详细代码

    下面我将为您详细讲解Java下载文件的四种方式和完整代码。 一、使用Java自带的URL类进行文件下载 使用Java自带的URL类可以方便地进行文件下载,步骤如下: 创建一个URL对象,指定需要下载的文件链接。 打开 URL 连接,获取 InputStream 对象,用于读取远程文件流。 创建文件输出流对象,用于保存下载的文件。 读取远程文件并将其写入到本地…

    Java 2023年5月20日
    00
  • Java反射概念与使用实例代码

    Java反射是Java语言自带的一种强大的机制,允许在运行时动态地获取类的信息、访问或修改类的属性和方法等。本文将详细讲解Java反射的概念和使用,包含以下内容: 反射概述 反射实现方式 反射的作用与优缺点 反射使用的实例代码 反射概述 Java反射(Reflection)是Java语言中的一种机制。它可以让我们在运行时动态地获取类的信息、访问或修改类的属性…

    Java 2023年5月30日
    00
  • 解析Java中PriorityQueue优先级队列结构的源码及用法

    解析Java中PriorityQueue优先级队列结构的源码及用法 什么是优先级队列? 优先级队列是一种特殊的队列,它会根据元素的优先级来决定队列中元素的顺序。在Java中,我们可以使用PriorityQueue类来实现优先级队列。 PriorityQueue源码解析 Java中的优先级队列主要由以下几个部分组成: PriorityQueue的构造函数 pu…

    Java 2023年5月19日
    00
  • 使用Java获取Json中的数据简单示例

    下面是使用Java获取Json中的数据简单示例的完整攻略: 什么是Json? Json(全称JavaScript Object Notation)是一种轻量级的数据交换格式。Json格式数据可以使用在不同的编程语言中进行数据传递,包括Java。 Json数据可以被编码为一个字符串,并在各种网络上传输或存储。在Java中可以使用Json库来解析和生成Json数…

    Java 2023年5月28日
    00
  • java通过MySQL驱动拦截器实现执行sql耗时计算

    首先让我解释一下MySQL驱动拦截器。MySQL驱动拦截器是通过JDBC驱动程序提供的一种扩展机制,以拦截JDBC API调用,从而可以在执行JDBC操作之前和之后添加自定义逻辑。使用MySQL驱动拦截器,我们可以实现一些非常有用的功能,例如,计算SQL执行时间、SQL量级统计、检测SQL注入等。 接下来,我将详细描述如何使用Java和MySQL驱动拦截器来…

    Java 2023年5月20日
    00
  • JavaMail实现邮件发送的方法

    JavaMail是Java语言中处理邮件相关操作的API。下面是JavaMail实现邮件发送的完整攻略。 步骤1:添加依赖 在使用JavaMail之前,你需要将JavaMail库添加到你的项目中,可以使用以下Maven依赖: <dependency> <groupId>com.sun.mail</groupId> <…

    Java 2023年6月15日
    00
  • 详解Java实现简单SPI流程

    下面是“详解Java实现简单SPI流程”的完整攻略。 什么是SPI? SPI的全称是Service Provider Interface,即服务提供者接口。在Java中,它是一种用于实现服务发现机制的标准。SPI的基本思想是,通过在Classpath路径下的META-INF/services目录下,提供一些接口对应的文件,文件内容为接口的实现类的全限定名。J…

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