Socket类

2.2 Socket类

Socket 类:该类实现客户端套接字,套接字指的是两台设备之间通讯的端点。

构造方法

  • public Socket(String host, int port) :创建套接字对象并将其连接到指定主机上的指定端口号。如果指定的host是null ,则相当于指定地址为回送地址。

    小贴士:回送地址(127.x.x.x) 是本机回送地址(Loopback Address),主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输。

构造举例,代码如下:

Socket client = new Socket("127.0.0.1", 6666);

成员方法

  • public InputStream getInputStream() : 返回此套接字的输入流。

    • 如果此Scoket具有相关联的通道,则生成的InputStream 的所有操作也关联该通道。
    • 关闭生成的InputStream也将关闭相关的Socket。
  • public OutputStream getOutputStream() : 返回此套接字的输出流。

    • 如果此Scoket具有相关联的通道,则生成的OutputStream 的所有操作也关联该通道。
    • 关闭生成的OutputStream也将关闭相关的Socket。
  • public void close() :关闭此套接字。

    • 一旦一个socket被关闭,它不可再使用。
    • 关闭此socket也将关闭相关的InputStream和OutputStream 。
  • public void shutdownOutput() : 禁用此套接字的输出流。

    • 任何先前写出的数据将被发送,随后终止输出流。

    2.3 ServerSocket类

ServerSocket类:这个类实现了服务器套接字,该对象等待通过网络的请求。

构造方法

  • public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上,参数port就是端口号。

构造举例,代码如下:

ServerSocket server = new ServerSocket(6666);

成员方法

  • public Socket accept() :侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。该方法会一直阻塞直到建立连接。

2.4 简单的TCP网络程序

TCP通信分析图解

  1. 【服务端】启动,创建ServerSocket对象,等待连接。
  2. 【客户端】启动,创建Socket对象,请求连接。
  3. 【服务端】接收连接,调用accept方法,并返回一个Socket对象。
  4. 【客户端】Socket对象,获取OutputStream,向服务端写出数据。
  5. 【服务端】Scoket对象,获取InputStream,读取客户端发送的数据。

到此,客户端向服务端发送数据成功。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自此,服务端向客户端回写数据。

  1. 【服务端】Socket对象,获取OutputStream,向客户端回写数据。
  2. 【客户端】Scoket对象,获取InputStream,解析回写数据。
  3. 【客户端】释放资源,断开连接。

客户端向服务器发送数据

服务端实现:

public class ServerTCP {public static void main(String[] args) throws IOException {System.out.println("服务端启动 , 等待连接 .... ");// 1.创建 ServerSocket对象,绑定端口,开始等待连接ServerSocket ss = new ServerSocket(6666);// 2.接收连接 accept 方法, 返回 socket 对象.Socket server = ss.accept();// 3.通过socket 获取输入流InputStream is = server.getInputStream();// 4.一次性读取数据// 4.1 创建字节数组byte[] b = new byte[1024];// 4.2 据读取到字节数组中.int len = is.read(b)// 4.3 解析数组,打印字符串信息String msg = new String(b, 0, len);System.out.println(msg);//5.关闭资源.is.close();server.close();}
}

客户端实现:

public class ClientTCP {public static void main(String[] args) throws Exception {System.out.println("客户端 发送数据");// 1.创建 Socket ( ip , port ) , 确定连接到哪里.Socket client = new Socket("localhost", 6666);// 2.获取流对象 . 输出流OutputStream os = client.getOutputStream();// 3.写出数据.os.write("你好么? tcp ,我来了".getBytes());// 4. 关闭资源 .os.close();client.close();}
}

服务器向客户端回写数据

服务端实现:

public class ServerTCP {public static void main(String[] args) throws IOException {System.out.println("服务端启动 , 等待连接 .... ");// 1.创建 ServerSocket对象,绑定端口,开始等待连接ServerSocket ss = new ServerSocket(6666);// 2.接收连接 accept 方法, 返回 socket 对象.Socket server = ss.accept();// 3.通过socket 获取输入流InputStream is = server.getInputStream();// 4.一次性读取数据// 4.1 创建字节数组byte[] b = new byte[1024];// 4.2 据读取到字节数组中.int len = is.read(b)// 4.3 解析数组,打印字符串信息String msg = new String(b, 0, len);System.out.println(msg);// =================回写数据=======================// 5. 通过 socket 获取输出流OutputStream out = server.getOutputStream();// 6. 回写数据out.write("我很好,谢谢你".getBytes());// 7.关闭资源.out.close();is.close();server.close();}
}

客户端实现:

public class ClientTCP {public static void main(String[] args) throws Exception {System.out.println("客户端 发送数据");// 1.创建 Socket ( ip , port ) , 确定连接到哪里.Socket client = new Socket("localhost", 6666);// 2.通过Scoket,获取输出流对象 OutputStream os = client.getOutputStream();// 3.写出数据.os.write("你好么? tcp ,我来了".getBytes());// ==============解析回写=========================// 4. 通过Scoket,获取 输入流对象InputStream in = client.getInputStream();// 5. 读取数据数据byte[] b = new byte[100];int len = in.read(b);System.out.println(new String(b, 0, len));// 6. 关闭资源 .in.close();os.close();client.close();}
}

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

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

相关文章

Appium —— 移动应用自动化测试开源工具!

Appium介绍 Appium是一个用于自动化移动应用程序的开源工具,它支持iOS和Android平台。通过Appium,开发人员可以使用各种编程语言(如Java、Python、Ruby等)编写测试脚本,以自动化测试移动应用程序的功能和用户界面。Ap…

基于springboot+vue的小区团购管理

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

蓝桥杯day2刷题日记-成绩分析-大写-整除序列-日期识别-特殊数的和

由浅入深 P8717 [蓝桥杯 2020 省 AB2] 成绩分析 #include <iostream> using namespace std; int num; double sum; int maxs,mins; int n;int main() {mins1e9;maxs-1e9;sum0;cin>>n;for(int i0;i<n;i){cin>>num;sumnum;maxsmax(maxs,num);minsmin(mins…

如何在Windows系统使用VS Code制作游戏网页并实现无公网IP远程访问

文章目录 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 前言 本篇教程&#xff0c;我们将通过VS Code实现远程开发MENJA小游戏&#xff0c;并通过cpolar内网穿透发布到公网&#xff0c;分…

《操作系统实践-基于Linux应用与内核编程》第10章--实验 Qt聊天程序

前言: 内容参考《操作系统实践-基于Linux应用与内核编程》一书的示例代码和教材内容&#xff0c;所做的读书笔记。本文记录再这里按照书中示例做一遍代码编程实践加深对操作系统的理解。 引用: 《操作系统实践-基于Linux应用与内核编程》 作者&#xff1a;房胜、李旭健、黄…

微信小程序调试、断点调试

1、wxml 查看对应的页面组件 2、console面板可以用来打印信息 3、sources 用来断点调试 4、network面板用来调试接口 5、storage面板 可以查看每个key对应的value内容&#xff0c;这些数据在用户使用小程序时被持久化保存在本地。

【mac M3】idea删除不用或者失效的jdk

【mac M3】idea删除不用或者失效的jdk 不用&#xff08;重复&#xff09;或者失效的jdk如下&#xff1a; 重复或者已失效的JDK版本出现在下拉列表中不仅影响美观&#xff0c;也影响效率&#xff0c;删除jdk的步骤如下&#xff1a; 步骤1.点击File 步骤2.选择Project Structure…

【C语言】文件操作揭秘:C语言中文件的顺序读写、随机读写、判断文件结束和文件缓冲区详细解析【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为【C语言】文件操作揭秘&#xff1a;C语言中文件的顺序读写、随机读写、判断文件结束和文件缓冲区详细解析【图文详解】&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 前言 欢迎来到本篇博客&…

Java AOP 简单实例演示

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

私域电商的关键要素和优势

私域电商的关键要素&#xff1a; 1、私域&#xff1a;指商家拥有的不受干扰的自己的领地&#xff0c;可以通过各种社交方式直接触达客户。 2、电&#xff1a;指利用互联网工具&#xff0c;如支付软件、社交软件、开店软件等&#xff0c;实现不受地域和时间限制的交易。 3、商…

WT32-ETH02 plus 串口转以太网开发,WT32-ETH01网关开发板升级款!

广受欢迎的WT32-ETH01网关开发板迎来了升级。 就是这款启明云端新推出的嵌入式串口转以太网开发板——WT32-ETH02 plus。应广大客户的需求&#xff0c;在WT32-ETH01的基础上增加了POE供电&#xff0c;可广泛应用于智能家居和网关等应用。开发板搭载2.4GHz Wi-Fi和蓝牙双模的SO…

一键部署灵境矩阵,属于自己的ai智能平台。

灵境矩阵 | 想象即现实 “灵境杯”智能体创意大赛&#xff0c;瓜分百万超级奖励 打造专属AI智能平台&#xff1a;一键部署灵境矩阵的无限可能 在数字化浪潮席卷全球的今天&#xff0c;人工智能技术已逐渐成为推动社会进步的关键力量。面对这一趋势&#xff0c;许多企业和个人…

永续合约多空双开“戴套”策略的逻辑是什么,胜率惊人的96%是怎么做到的,其实并没有想的那么复杂,会代码的都可以写出来

为什么叫多空双开“戴套”量化策略呢&#xff0c;因为这个策略的特点是永远有一个仓位是被套的&#xff0c;但是这个不影响我们盈利&#xff0c;具体怎么实现大家看下面这个图就明白是怎么回事了。 这个策略的逻辑很简单也容易理解&#xff0c;就是多空双开&#xff0c;盈利平仓…

FREERTOS空闲任务和低功耗

空闲任务 空闲任务是 FreeRTOS 必不可少的一个任务&#xff0c;其他 RTOS 类系统也有空闲任务&#xff0c;比如uC/OS。看名字就知道&#xff0c;空闲任务是处理器空闲的时候去运行的一个任务&#xff0c;当系统中没有其他就绪任务的时候空闲任务就会开始运行&#xff0c;空闲任…

slab分配器

什么是slab分配器&#xff1f; 用户态程序可以使用malloc及其在C标准库中的相关函数申请内存&#xff1b;内核也需要经常分配内存&#xff0c;但无法使用标准库函数&#xff1b;linux内核中&#xff0c;伙伴分配器是一种页分配器&#xff0c;是以页为单位的&#xff0c;但这个…

基于 Echarts + Python Flask ,我搭建了一个动态实时大屏监管系统

一、效果展示 1. 动态实时更新数据效果图 2. 鼠标右键切换主题 二、确定需求方案 支持Windows、Linux、Mac等各种主流操作系统&#xff1b;支持主流浏览器Chrome&#xff0c;Microsoft Edge&#xff0c;360等&#xff1b;服务器采用python语言编写&#xff0c;配置好python环…

代码随想录算法训练营第二十五天|leetcode46、47、491题

一、leetcode第491题 using namespace std;class Solution { private:vector<vector<int>> result;vector<int> path;// 回溯函数用于找到递增子序列void backtracking(vector<int>& nums, int startIndex) {// 如果当前子序列长度大于1&#xff…

计算机设计大赛 题目: 基于深度学习的疲劳驾驶检测 深度学习

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…

【C++】constexpr和const

在C中&#xff0c;constexpr和const都用于声明常量&#xff0c;但它们之间有一些重要的区别&#xff1a; const&#xff1a; const用于定义常量&#xff0c;表示其数值不可被修改。 变量被声明为const后&#xff0c;在程序执行过程中其数值不可改变。 可以用于修饰变量、指针…

ASP.NET Core新特性

1. ASP.NET Core2.1 ASP.NET Core 2.1于2018年5月30日发布。是ASP.NET Core框架的一个重要版本&#xff0c;带来了许多新功能和改进。以下是ASP.NET Core 2.1中一些主要的特性&#xff1a; SignalR&#xff1a;引入了 SignalR&#xff0c;这是一个实时通信库&#xff0c;使得构…