Java中Socket用法详解

Java中Socket用法详解

概述

Java中提供了Socket和ServerSocket这两个类用于网络通信,其中Socket是客户端用于构建TCP协议连接的类,而ServerSocket则是服务端用于监听和接受连接请求的类。

Socket

1. 创建Socket

可以通过如下方式创建Socket连接:

Socket socket = new Socket(String host, int port);

其中host为待连接的服务器地址,port为端口号。例如:

Socket socket = new Socket("127.0.0.1", 8888);

2. 读写数据

连接建立后,可以通过获取Socket的输入输出流进行数据的读写操作。

当需要向服务器发送数据时,可以通过输出流将数据发送出去:

OutputStream out = socket.getOutputStream();
DataOutputStream dout = new DataOutputStream(out);
dout.writeBytes("Hello Server!");

当需要从服务器接收数据时,可以通过输入流接收数据:

InputStream in = socket.getInputStream();
DataInputStream din = new DataInputStream(in);
String message = din.readUTF();

3. 断开连接

当数据传输完毕后,需要断开连接,可以通过以下方式断开连接:

socket.close();

ServerSocket

1. 创建ServerSocket

可以通过如下方式创建ServerSocket:

ServerSocket serverSocket = new ServerSocket(int port);

其中port为服务端监听的端口号。

2. 监听和接收连接请求

通过如下方式进行监听和接收客户端连接请求:

Socket sock = serverSocket.accept();

在有客户端请求连接后,accept()方法将返回一个Socket连接对象,用于服务端和客户端的通信。

3. 读写数据

服务端接收客户端的数据和向客户端发送数据的方式与客户端向服务端发送数据和接收数据的方式相同。

4. 断开连接

当服务端需要断开与客户端的连接时,可以通过以下方式断开连接:

sock.close();

示例1:客户端向服务器发送数据

客户端代码:

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

public class TcpClient {
    public static void main(String[] args) throws Exception {
        Socket socket = new Socket("localhost", 8888);
        OutputStream out = socket.getOutputStream();
        DataOutputStream dout = new DataOutputStream(out);
        dout.writeUTF("Hello Server!");
        out.close();
        dout.close();
        socket.close();
    }
}

服务端代码:

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

public class TcpServer {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(8888);
        Socket sock = serverSocket.accept();
        InputStream is = sock.getInputStream();
        DataInputStream dis = new DataInputStream(is);
        String message = dis.readUTF();
        System.out.println("Received message: " + message);
        dis.close();
        is.close();
        sock.close();
    }
}

以上代码实现了客户端向服务器发送一段字符串,并且输出了服务端接收到的字符串。

示例2:服务器向客户端发送数据

客户端代码:

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

public class TcpClient {
    public static void main(String[] args) throws Exception {
        Socket socket = new Socket("localhost", 8888);
        InputStream in = socket.getInputStream();
        DataInputStream din = new DataInputStream(in);
        String message = din.readUTF();
        System.out.println("Received message: " + message);
        in.close();
        din.close();
        socket.close();
    }
}

服务端代码:

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

public class TcpServer {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(8888);
        Socket sock = serverSocket.accept();
        OutputStream out = sock.getOutputStream();
        DataOutputStream dout = new DataOutputStream(out);
        dout.writeUTF("Hello Client!");
        out.close();
        dout.close();
        sock.close();
    }
}

以上代码实现了服务端向客户端发送一段字符串,并且输出了客户端接收到的字符串。

结论

通过本文的介绍,我们了解了Java中Socket的用法,包括客户端和服务端的数据传输和连接的建立与断开。在实际的开发中,Socket在网络通信中应用广泛,掌握Socket编程基础是十分必要的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中Socket用法详解 - Python技术站

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

相关文章

  • kafka并发写大消息异常TimeoutException排查记录

    针对“kafka并发写大消息异常TimeoutException排查记录”这个问题,我给大家提供下面的攻略: 问题描述 Kafka是一款分布式消息系统,支持高并发、高吞吐量的数据处理场景。但是,有时候在并发写入大消息时,可能会出现TimeoutException异常,导致消息写入失败,引起系统的异常。那么如何排查和解决这个问题呢? 问题原因分析 Timeou…

    Java 2023年5月20日
    00
  • jsp中点击图片弹出文件上传界面及预览功能的实现

    要实现JSP中点击图片弹出文件上传界面及预览功能,可以采用以下步骤: 导入相关依赖库和设置表单 首先需要在JSP页面中导入相关的依赖库,比如jQuery、layer等,以及设置一个表单用于文件上传。示例代码如下: <head> <script src="https://cdn.bootcdn.net/ajax/libs/jquer…

    Java 2023年6月15日
    00
  • 线上诊断神器-arthas基本应用

    Arthas基本应用 一、Arthas作用 什么是Arthas呢? ​ Arthas 是一款阿里推出的线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。 那我们为什么要使用Arthas? …

    Java 2023年4月22日
    00
  • Java面试题冲刺第八天–Spring框架2

    Java面试题冲刺第八天–Spring框架2 本文将详细讲解Java面试题冲刺第八天–Spring框架2的完整攻略,包括Spring框架的概述、Spring框架的核心模块、Spring框架的优点、Spring框架的示例说明等。 Spring框架的概述 Spring框架是一个轻量级的Java开发框架,它提供了一系列的工具和框架,用于简化Java开发过程中的…

    Java 2023年5月18日
    00
  • java实现归并排序算法

    下面是详细讲解 “Java实现归并排序算法” 的完整攻略。 归并排序算法简介 归并排序是一种分治算法,先将待排序的序列拆分成若干个子序列,然后将每个子序列分别排序,最后将已经排序好的子序列合并成完整的排序结果。 归并排序的时间复杂度为O(nlogn),也是一种稳定排序算法。 Java实现归并排序 算法思路: 归并排序算法的主要思路为:将待排序序列细分到每个元…

    Java 2023年5月19日
    00
  • HTTP头部信息解释分析(详细整理)

    HTTP头部信息是客户端请求和服务器响应的重要组成部分,它包含了一些重要的元数据,比如用户代理信息、请求响应方式、字符编码、缓存控制等等。正确理解和解析HTTP头部信息对于开发人员来说至关重要,本文将详细整理HTTP头部信息解释分析的攻略,下面是具体内容: HTTP头部信息解释分析攻略 了解HTTP头部信息的基本概念 在开始分析HTTP头部信息之前,需要对H…

    Java 2023年6月15日
    00
  • 如何在SpringBoot 中使用 Druid 数据库连接池

    使用 Druid 数据库连接池可以有效地提高数据库连接的稳定性和性能,下面是使用 Druid 数据库连接池的详细步骤和示例。 准备工作 在使用 Druid 数据库连接池之前,需要先添加相关的依赖。 <dependency> <groupId>com.alibaba</groupId> <artifactId>d…

    Java 2023年5月20日
    00
  • Java的运算符和程序逻辑控制你了解吗

    Java的运算符和程序逻辑控制非常重要,是Java语言中的基础知识点。下面我们来详细讲解一下。 运算符 算术运算符 Java中的算术运算符包括加减乘除、取余等,常用的有以下几个: +:加法运算符,将两个数相加。 -:减法运算符,将一个数减去另一个数。 *:乘法运算符,将两个数相乘。 /:除法运算符,将一个数除以另一个数。 %:取余运算符,求一个数除以另一个数…

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