Java Socket和ServerSocket 使用

news2024/11/29 20:36:27

在Java中,Socket和ServerSocket是用于创建网络连接的重要类。Socket类用于创建客户端套接字,而ServerSocket类用于创建服务器套接字。在本文中,我们将讨论Socket和ServerSocket的作用、使用方法以及相关代码示例。

在这里插入图片描述

Socket的作用

Socket是Java中用于创建客户端套接字的类。它提供了一种机制,可以让客户端与服务器建立网络连接,进行数据传输和通信。Socket类实现了TCP/IP协议,可以用于创建基于TCP或UDP的网络连接。

Socket类提供了一些方法,可以用于发送和接收数据。例如,使用Socket类的getInputStream()和getOutputStream()方法,可以获取输入流和输出流,从而读取和写入数据。Socket类还提供了一些其他方法,例如connect()、close()、setSoTimeout()等,用于控制连接的建立和关闭、超时时间等。

ServerSocket的作用

ServerSocket是Java中用于创建服务器套接字的类。它可以监听来自客户端的连接请求,并建立与客户端之间的网络连接。一旦与客户端建立了连接,ServerSocket就可以创建一个新的Socket对象,用于与客户端进行数据传输和通信。

ServerSocket类提供了一些方法,可以用于监听连接请求和创建新的Socket对象。例如,使用ServerSocket类的accept()方法,可以监听连接请求,并返回一个新的Socket对象,用于与客户端进行数据传输和通信。ServerSocket类还提供了一些其他方法,例如bind()、close()、getLocalPort()等,用于控制服务器套接字的创建和关闭、本地端口号等。

Socket和ServerSocket的使用方法

在使用Socket和ServerSocket时,我们需要遵循以下步骤:

创建客户端套接字

首先,我们需要创建一个客户端套接字,用于与服务器建立连接。可以使用Socket类的构造方法创建客户端套接字,例如:

Socket socket = new Socket("localhost", 8080);

这个示例中,我们使用Socket类的构造方法创建了一个名为socket的客户端套接字。其中,"localhost"表示服务器的主机名或IP地址,8080表示服务器的端口号。

创建服务器套接字

接下来,我们需要创建一个服务器套接字,用于监听来自客户端的连接请求。可以使用ServerSocket类的构造方法创建服务器套接字,例如:

ServerSocket serverSocket = new ServerSocket(8080);

这个示例中,我们使用ServerSocket类的构造方法创建了一个名为serverSocket的服务器套接字。其中,8080表示服务器的端口号。

监听连接请求

一旦创建了服务器套接字,我们需要使用accept()方法监听来自客户端的连接请求,并创建一个新的Socket对象,用于与客户端进行数据传输和通信。可以使用如下代码实现:

Socket socket = serverSocket.accept();

这个示例中,我们使用ServerSocket类的accept()方法监听连接请求,返回一个新的Socket对象,用于与客户端进行数据传输和通信。这个方法是阻塞的,直到有客户端连接到服务器为止。

发送和接收数据

一旦与客户端建立了连接,我们就可以使用Socket类的输入流和输出流,发送和接收数据。例如,可以使用如下代码发送数据:

OutputStream outputStream = socket.getOutputStream();
outputStream.write("Hello, world!".getBytes());

这个示例中,我们使用Socket类的getOutputStream()方法获取输出流,将字符串"Hello, world!"转换为字节数组,并使用write()方法发送数据。

可以使用如下代码接收数据:

InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int bytesRead = inputStream.read(buffer);
String message = new String(buffer, 0, bytesRead);
System.out.println("Received message: " + message);

这个示例中,我们使用Socket类的getInputStream()方法获取输入流,创建一个1024字节的缓冲区,并使用read()方法从输入流中读取数据。读取的数据存储在缓冲区中,并返回读取的字节数。最后,我们将缓冲区中的数据转换为字符串,并输出到控制台。

关闭套接字

最后,我们需要关闭客户端套接字和服务器套接字,释放资源。可以使用如下代码关闭套接字:

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

Socket和ServerSocket的示例代码

下面是一个简单的Socket和ServerSocket的示例代码,实现了一个简单的客户端-服务器应用程序,客户端向服务器发送消息,服务器收到消息并将其输出到控制台。

服务器端代码

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("Server started...");

        Socket socket = serverSocket.accept();
        System.out.println("Client connected: " + socket.getInetAddress());

        InputStream inputStream = socket.getInputStream();
        byte[] buffer = new byte[1024];
        int bytesRead = inputStream.read(buffer);
        String message = new String(buffer, 0, bytesRead);
        System.out.println("Received message: " + message);

        socket.close();
        serverSocket.close();
    }
}

客户端代码

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8080);
        System.out.println("Connected to server: " + socket.getInetAddress());

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("Hello, server!".getBytes());

        socket.close();
    }
}

总结

在Java中,Socket和ServerSocket是用于创建网络连接的重要类。Socket类用于创建客户端套接字,服务器Socket类用于创建服务器套接字。使用Socket和ServerSocket,我们可以轻松地创建基于TCP或UDP的网络连接,并实现数据传输和通信。在使用Socket和ServerSocket时,我们需要遵循一定的步骤,例如创建套接字、监听连接请求、发送和接收数据,最后关闭套接字。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/523709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【连续介质力学】张量的并矢和性质1

张量的代数操作 并矢 Dyadic 两个向量的张量积是一个并矢,得到一个二阶张量 u ⃗ v ⃗ u ⃗ ⨂ v ⃗ A \vec u \vec v \vec u \bigotimes \vec v A u v u ⨂v A 其中, ⨂ \bigotimes ⨂是张量乘积,任意张量可以表示成并矢的线性组合 …

戴尔 Dell XPS 13 7390电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件型号驱动情况 主板戴尔 Dell XPS 13 7390 处理器Intel Core i7-10510u已驱动 内存 16 GB ( 酷兽 DDR4 3200MHz 8GB x 2 )已驱动 硬盘三星 SSD 860 EVO 250GB (250 …

【iOS】--KVC与KVO

键值编码(KVC)与键值监听(KVO) KVC(Key Value Coding)允许以字符串的形式间接操作对象的属性。 简单的KVC 最基本的KVC由NSKeyValueCoding协议提供支持,最基本的操作属性的两个方法如下 set…

利用具有局部信息的引导自注意进行息肉分割

文章目录 Using Guided Self-Attention with Local Information for Polyp Segmentation摘要本文方法PP-Guided Self-AttentionLocal-to-Global Mechanism损失函数 实验结果 Using Guided Self-Attention with Local Information for Polyp Segmentation 摘要 背景 自动准确的…

Microsoft Edge是一款现代化的浏览器,它拥有众多功能和强大的性能

随着互联网的不断发展,浏览器已经成为我们日常生活中必不可少的工具之一。作为一款现代化的浏览器,Microsoft Edge拥有许多强大的功能,为用户带来更加流畅的浏览体验。最近,Edge推出了分屏功能,这项功能可以大大提高生…

STM32------ADC

ADC 1、ADC介绍 1、1介绍 ADC即模数转换器。 例如:电信号转化成数字量。 1、2 ADC类型 并联比较型、逐次逼近型 并联比较型如下: 分压部分比较部分编码部分。 ADC分辨率:三位(上图) 优点:转换速度快…

类和对象下

文章目录 一、初始化列表1、语法:2、初始化顺序 二、static成员三、友元1、友元函数2、友元类 四、拷贝对象时的编译器优化例1、例2、例3、 一、初始化列表 1、语法: 初始化列表: 以一个冒号开始,接着是一个以逗号分隔的数据成员…

【Python PyTorch】零基础也能轻松掌握的学习路线与参考资料

文章目录 一、PyTorch的基础知识二、PyTorch数据处理三、PyTorch模型构建四、PyTorch模型训练和评估五、总结 作为当前最流行的深度学习框架之一,PyTorch已成为许多数据科学家和深度学习工程师的首选。本文将提供一条针对初学者的完整的学习路线,包括PyT…

hnust 湖南科技大学 2023 安卓 期中考试 复习资料

前言 ★:录音中提到的致谢:hwl,lqx,ly,sw重点来源:7-8班 PPT和录音内容来源:PPT知识点大多很抽象,需要联系实际代码来理解多做1-9章课后习题,编程题可以不做获取最新版本…

【AI大模型】“讯飞星火”大模型计划10月底赶超ChatGPT

文章目录 前言你使用过这种对话式AI吗?有什么看法或感受?“讯飞星火大模型将超越chatgpt?”这类型的人工智能对现在的社会有什么意义?这类型的人工智能,未来前景如何?申请体验写在最后 前言 5月6日&#xf…

第十三章 使用Postfix与Dovecot部署邮件系统

文章目录 第十三章 使用Postfix与Dovecot部署邮件系统一、电子邮件系统1、常见的邮件协议2、注意事项 二、部署电子邮件系统1、部署基础的电子邮件系统(1)、配置服务器主机名称(2)、配置服务器的DNS地址(3)…

【LeetCode: 115. 不同的子序列 | 暴力递归=>记忆化搜索=>动态规划 | 位置对应】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

队列Queue和栈Stack

什么是队列queue? 先进先出表,是一种受限制的线性表.其限制是仅允许在表的队尾进行插入数据和表的队头进行删除数据. 队列的使用场景: 线程池ThreadPoolExecutor ThreadPoolExecutor源码中核心变量(前面3个是重点) corePoolSize线程池维护的最小线程数量,哪怕是空闲的BlockQ…

Carla仿真三:Traffic Manager交通管理器详解

CARLA Traffic Manager 一、什么是Traffic Manager1、Traffic Manager简介2、Traffic Manager框架3、Traffic Manager模块 二、Traffic Manager控制方法1、TM控制交通参与者的自动驾驶的规则2、TM控制交通参与者行为的API摘要3、TM控制交通参与者行为的API 三、Traffic Manager…

力扣sql中等篇练习(十九)

力扣sql中等篇练习(十九) 1 苹果和桔子的个数 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # 没有使用group by也可以使用sum函数,因为默认是所有数据行自成一组 SELECT SUM(b.apple_countIFNULL(c.…

[LeetCode周赛复盘] 第 104 场双周赛20230513

[LeetCode周赛复盘] 第 104 场双周赛20230513 一、本周周赛总结6366. 老人的数目1. 题目描述2. 思路分析3. 代码实现 6367. 矩阵中的和1. 题目描述2. 思路分析3. 代码实现 6369. 最大或值1. 题目描述2. 思路分析3. 代码实现 6423. 英雄的力量1. 题目描述2. 思路分析3. 代码实现…

C:sh: 总是爆出:1: pause: not found

在linux平台下应该使用:pause() 导入:#include unistd.h 也就是unix下的标准函数,而不是代码不跨平台,从其他语言转来的新手很不舒服 参考:sh: 1: pause: not found_yjyn1的博客-CSDN博客

mysql数据库的表约束

表的约束 5.1:表的约束的概念 定义: 数据库表约束是用于定义和实施数据完整性的规则或条件。它们被应用于数据库表中的列,以确保数据的一致性、有效性和准确性。表约束可以强制执行特定的规则,限制数据的插入、更新或删除操作&…

ChatGPT的诞生和发展

ChatGPT的诞生和发展 ChatGPT是一种基于GPT模型的聊天机器人。GPT模型是一种基于深度学习的自然语言处理模型,由OpenAI团队开发,可以生成与输入文本相关的连续文本。ChatGPT的诞生和发展,可以追溯到GPT模型的开发与应用。 一、GPT模型的开…

jdk与tomcat的安装-----linux软件的安装与配置

安装方式 jdk的安装 上传jdk压缩包解压 tar -zxvf jdk压缩包名字 -C 解压地址配置环境变量 vi /etc/profileJAVA_HOMEjdk解压地址 PATH$JAVA_HOME/bin:$PATY重新加载profile文件,使更改的配置生效 source /etc/profile 查看是否安装成功 java -verisontomcat的…