Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by dataOutput Stream.flush
Android 网络编程 TCP(聊天实现)看这一篇就够了
先补充一下什么是tcp TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它是互联网协议套件(TCP/IP)中的一部分,用于在网络中的计算机之间进行可靠的数据传输。 以下是 TCP 的一些主要特点和概念: 面向连接: 在使用 TCP 进行通信时,通信的两端需要先建立连接,然后才能进行数据的传输。连接建立后,双方可以通过这个连接进行数据的可靠传输。 可靠性: TCP 提供可靠的数据传输,确保数据的完整性和顺序性。它使用确认和重传机制来检测丢失的数据包并进行重传,以确保数据的可靠性。 全双工通信: TCP 支持全双工通信,允许双方在同一时间既能发送数据也能接收数据。这使得双方可以同时进行双向的交互。 流控制: TCP 使用流控制机制来防止发送方发送过多的数据导致接收方无法处理。通过通告窗口大小,TCP 可以动态调整发送方的发送速率。 拥塞控制: TCP 通过拥塞控制机制来避免网络拥塞。通过调整发送速率和使用慢启动等算法,TCP 可以适应网络的变化,并减少拥塞的发生。 面向字节流: TCP...
2024.2.27 模拟实现 RabbitMQ -- 网络通信设计(客户端)
目录 需求分析 RabbitMQ 客户端设定 一个客户端可以有多个模块 每个模块均可以和 Broker Server 之间建立 "逻辑上的连接"(channel) 这几个模块的 channel 彼此之间是相互不影响的 同时这几个 channel 复用了同一个 TCP 连接 此处我们将仿照 RabbitMQ 客户端设定 ConnectionFactory(连接工厂) 这个类持有服务器的地址 该类用于创建 Connection 对象 具体代码编写: import lombok.Getter; import lombok.Setter; import java.io.IOException; @Getter @Setter public class ConnectionFactory { // broker server 的 ip 地址 private String host; // broker server 的端口号 private int port; public Connection newConnection() throws IOException { Connection...
根据源码,模拟实现 RabbitMQ - 网络通讯设计,实现客户端Connection、Channel(完结)
目录 一、客户端代码实现 RabbitMQ 的客户端设定:一个客户端可以有多个模块,每个模块都可以和 broker server 之间建立 “逻辑上的连接” (channel),这几个模块的channel 彼此之间是互相不影响的,同时这几个 channel 又复用的同一个 TCP 连接,省去了频繁 建立/销毁 TCP 连接的开销(三次握手、四次挥手......). 这里,我们也按照这样的逻辑实现 消息队列 的客户端,主要涉及到以下三个核心类: ConnectionFactory:连接工厂,这个类持有服务器的地址,主要功能就是创建 Connection 对象. Connection:表示一个 TCP连接,持有 Socket 对象,用来 写入请求/读取响应,管理多个Channel 对象. Channel:表示一个逻辑上的连接,需要提供一系列的方法,去和服务器提供的核心 API 对应(客户端提供的这些方法的内部,就是写入了一个特定的请求,然后等待服务器响应). 1)实现 ConnectionFactory 主要用来创建 Connection 对象.
根据源码,模拟实现 RabbitMQ - 网络通讯设计,自定义应用层协议,实现 BrokerServer (8)
目录 1.1、交互模型 目前我们需要考虑的交互模型:生产者消费者都是客户端,都需要通过 网络 和 BrokerServer 进行通信 此处我们使⽤ TCP 协议, 来作为通信的底层协议. 同时在这个基础上⾃定义应⽤层协议, 完成客⼾端对服 务器这边功能的远程调⽤. TCP 是有连接的(Connection),创建 / 断开 TCP 连接成本还是挺高的(需要三次握手啥的),那么这里就是用 Channel 来表示 Connection 内部的 “逻辑上” 的连接,使得 “一个管道,多个网线传输” 的效果,使得 TCP连接得到复用 Ps:要远程调用的功能就是在 VirtualHost 中 public 的方法. 1.2、自定义应用层协议 之前我们定义的 Message 对象,本体就是二进制的数据,因此这里不方便使用 JSON 这种文本协议 / 格式. 因此这里使用 二进制 的方式来设定协议.
Spring@Scheduled定时任务接入XXL-JOB的一种方案(基于SC Gateway)
目前在职的公司,维护着Spring Cloud分布式微服务项目有25+个。其中有10个左右微服务都写有定时任务逻辑,采用Spring @Scheduled这种方式。 Spring @Scheduled定时任务的缺点: 不支持集群:为避免重复执行,需引入分布式锁 死板不灵活:不支持手动执行,单次执行,补偿执行,修改任务参数,暂停任务,删除任务,修改调度时间,失败重试 无报警机制:任务失败之后没有报警机制,逻辑执行异常记录ERROR日志接入Prometheus告警这种方式不算,这算是日志层面的告警,而不是任务层面的告警机制 不支持分片任务:处理有序数据时,多机器分片执行任务处理不同数据 …… 基于此,考虑引入轻量级分布式定时调度框架XXL-JOB,即把定时任务迁到XXL-JOB平台。 关于XXL-JOB,可参考之前的blog。 考虑到我们有10+个SC分布式应用,30+个定时任务。如果每个应用都需要迁移改造的话,则每个应用都需要配置XXL-JOB相关的信息。当然,这可以通过Apollo namespace共享继承机制来实现。题外话:有空的话,后面会写一篇Apollo...
根据源码,模拟实现 RabbitMQ - 实现消息持久化,统一硬盘操作(3)
目录 1.1、消息的存储设定 传输的 Message 消息因该如何在硬盘上存储?我们应当考虑一下几点: 消息操作并不涉及到复杂的增删改查. 消息数量可能会非常多,数据库访问的效率不是很高. 因此这里不使用数据库进行存储,而是把消息存储在文件中~ 消息是依附于队列的,因此存储的时候,就把消息按照 队列 维度展开. 根据上一章我们讲到数据库的存储,因此我们已经有了 data 目录(meta.db 就在这个目录中),这里我们约定 —— 一个队列就是一个文件目录,每个对列的文件目录下有两个文件,来存储消息,例如下图: 第一个文件 queue_data.txt:用来保存消息的内容; 第二个文件 queue_stat.txt:用来保存消息的统计信息; 这里约定,queue_data.txt 文件中包含若干个消息,每个消息都以二进制的方式存储,每个消息由两个部分构成, 第一个部分约定占用 4 个字节,用来保存消息的长度(防止粘包问题). 第二个部分为具体的二进制消息数据(Message 对象序列化后的数据).
基于Java制作一个简易的远控终端_java_脚本之家
远控终端的本质 1、服务端(攻击者)传输消息 ----> socket连接 ----> 客户端(被攻击者)接收消息 2、客户端执行消息内容(即执行服务端传回来的命令) 3、客户端传输执行结果 ----> socket连接 ----> 服务端显示命令执行结果 Java制作简易的远控 1、环境 环境:IntelliJ IDEA 2022.1.1 + jdk1.8 + exe4j.exe 2、新建项目 打开idea,直接新建一个最普通的Java项目即可。 3、新建一个Java类 4、编写程序 (1)导入需要使用到的类包 import java.io.*; import java.net.Socket; import java.nio.charset.StandardCharsets; (2)编写main方法 ...
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with dataOutput
Contact dataOutput, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack