Java Socket编程(二) Java面向连接的类

下面就是关于“Java Socket编程(二) Java面向连接的类”的完整攻略。

一、什么是面向连接的Socket

在Socket编程中,TCP协议是面向连接的协议,UDP协议是无连接的协议。面向连接的Socket需要先建立连接,数据传输完毕后还需要断开连接。

在Java中,面向连接的Socket通信使用的是java.net.Socket类和java.net.ServerSocket类。其中,Socket类代表客户端套接字,ServerSocket类代表服务器套接字。需要注意的是,ServerSocket只负责监听端口并等待客户端连接,一旦有客户端连接,就会创建一个新的Socket实例与客户端通信。

二、Socket步骤详解

  1. 创建ServerSocket对象并绑定端口

java
ServerSocket serverSocket = new ServerSocket(port);

其中,port是要绑定的端口号。

  1. 调用accept()方法并等待客户端连接

java
Socket socket = serverSocket.accept();

这会阻塞当前线程,直到有客户端连接或者发生异常。

  1. 获取客户端输入输出流,进行数据传输

java
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();

利用输入输出流进行数据的读取和写入。

  1. 断开连接

java
socket.close();
serverSocket.close();

数据传输完毕后要断开连接,先关闭Socket,再关闭ServerSocket

三、Socket示例说明

示例一:简单的Socket服务器

下面是一个简单的Socket服务器示例,它监听端口8888,当有客户端连接时,向客户端发送消息Hello World!,并断开连接。

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        Socket socket = serverSocket.accept();
        OutputStream out = socket.getOutputStream();
        out.write("Hello World!".getBytes());
        out.flush();
        socket.close();
        serverSocket.close();
    }
}

示例二:简单的Socket客户端

下面是一个简单的Socket客户端示例,它连接到localhost的端口8888,读取服务器发送的消息并打印,然后断开连接。

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8888);
        InputStream in = socket.getInputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = in.read(buffer)) != -1) {
            System.out.println(new String(buffer, 0, len));
        }
        socket.close();
    }
}

四、总结

本文详细讲解了Java面向连接的Socket编程,包括Socket步骤和两个示例说明。希望能够帮助大家理解Socket编程的基本概念和实现方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Socket编程(二) Java面向连接的类 - Python技术站

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

相关文章

  • Tomcat中的catalina.bat原理详细解析

    Tomcat中的catalina.bat原理详细解析 什么是catalina.bat? catalina.bat是Tomcat的启动脚本之一。在Windows下,Tomcat是通过执行catalina.bat实现启动和关闭的。该脚本文件位于Tomcat的bin目录下。 catalina.bat的作用 catalina.bat实现了Tomcat的启动、关闭、重…

    Java 2023年5月20日
    00
  • MyBatis传入数组集合类并使用foreach遍历

    MyBatis是一款流行的Java ORM框架,可以用于简化数据库操作。这里将详细讲解如何在MyBatis中传入数组集合类并使用foreach进行遍历。 第一步:传入数组集合类 在MyBatis中,可以通过使用@Param注解来传递参数。@Param注解需要指定参数的名称,例如: <select id="selectUsersByIds&qu…

    Java 2023年5月26日
    00
  • 聊一聊jdk1.8中的ArrayList 底层数组是如何扩容的

    ArrayList 是一种常用的动态数组数据结构,底层依托于一个 Object[] 数组,当数组已满或者添加元素个数达到预分配的容量时,需要对数组进行扩容以继续添加元素。在 JDK1.8 中,时常听到关于 ArrayList 扩容的问题,接下来我将详细介绍 ArrayList 的底层数组如何扩容。 ArrayList 底层数组的定义 在 JDK1.8 的 A…

    Java 2023年5月26日
    00
  • spring+springmvc+mybatis 开发JAVA单体应用

    下面是关于“spring+springmvc+mybatis 开发JAVA单体应用”的完整攻略: 一、前置知识 在开始之前,需要掌握以下技术: Java基础知识; SQL语言基础; Spring框架基础知识; Spring MVC框架的基础知识; MyBatis框架基础。 如果你已经掌握了以上技术,那么你就可以继续阅读该攻略。 二、搭建环境 1. 安装JDK…

    Java 2023年6月1日
    00
  • java基础之数组常用操作总结(必看篇)

    Java基础之数组常用操作总结(必看篇) 一、什么是数组 数组是一种容器,用于存储固定大小的同类型元素序列。在Java中,数组是用连续的内存空间来存储相同类型的数据。 二、数组的定义 Java中使用[]来声明一个数组类型,且数组必须被初始化为一定数量的元素。数组的长度是不可变的。 dataType[] arrayName; // 声明数组 arrayName…

    Java 2023年5月26日
    00
  • spring boot整合kafka过程解析

    下面是关于Spring Boot整合Kafka过程的解析攻略,并附带两个示例: 概述 Kafka是一个开源的分布式消息传递平台,它提供了高吞吐量和低延迟的方式来传递消息。它的主要特点是: 高吞吐量:Kafka每秒钟可以处理数百万的消息。这使得它适合于对实时数据流进行发布/订阅、消息队列、异步处理等场景。 高扩展性:Kafka的扩展性非常好,多个Kafka服务…

    Java 2023年5月19日
    00
  • spring security中的默认登录页源码跟踪

    让我来为您讲解一下“spring security中的默认登录页源码跟踪”的完整攻略。 1. 查阅官方文档 首先,我们需要查阅Spring Security官方文档,寻找与默认登录页相关的信息。在官方文档中,我们可以找到登录页的配置方式及默认路径。在Spring Security 5.0版本及以上,登录页默认放在/login路径下。同时,Spring Sec…

    Java 2023年5月20日
    00
  • 使用java数组 封装自己的数组操作示例

    使用Java数组,封装自己的数组操作是Java开发中比较常见的任务,本攻略将为您提供两个示例来说明如何封装自己的数组操作。 1. 实现数组反转的方法 在编写Java程序时,我们经常需要将数组进行反转。封装一个数组反转的方法是很有必要的。下面是一个代码示例: public static int[] reverse(int[] array){ int[] res…

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