详解Java的TCP/IP编程学习--基于定界符的成帧
作者:毕九生 发布时间:2023-11-23 03:02:32
标签:Java,TCP/IP,成帧
一、定界符成帧
Framer接口
package framer;
import java.io.IOException;
import java.io.OutputStream;
public interface Framer {
/**
* 添加成帧信息并将指定消息输出到指定流
* @param message
* @param out
* @throws IOException
*/
void frameMsg(byte[] message, OutputStream out) throws IOException;
/**
* 扫描指定的流,从中抽取下一条信息
* @return
* @throws IOException
*/
byte[] nextMsg() throws IOException;
}
基于定界符的成帧
package framer;
import java.io.*;
/**
* @ClassName DelimFramer
* @Description TODO
* @Author Cays
* @Date 2019/3/16 22:04
* @Version 1.0
**/
public class DelimFramer implements Framer {
//输入流
private InputStream in;
//定界符为换行符
private static final byte DELIMITER='\n';
public DelimFramer(InputStream in) {
this.in = in;
}
@Override
public void frameMsg(byte[] message, OutputStream out) throws IOException {
//检测信息中是否包含换行符
for (byte b:message){
if (b==DELIMITER){
throw new IOException("Message contaions delimiter");
}
}
//将成帧的信息输出到流中
out.write(message);
//添加定界符
out.write(DELIMITER);
out.flush();
}
@Override
public byte[] nextMsg() throws IOException {
ByteArrayOutputStream messageBuffer=new ByteArrayOutputStream();
int nextByte;
//读取流中的每一个字节,直到遇到定界符
while ((nextByte=in.read())!=DELIMITER){
if (nextByte==-1){
//如果遇到定界符之前就到了流的终点
if (messageBuffer.size()==0){
return null;
}else {
//如果存入缓存区之前有数据,抛出异常
throw new EOFException("Non-empty message without delimiter");
}
}
//将无定界符的字节写入消息缓存区
messageBuffer.write(nextByte);
}
//将消息缓存区的内容以字节数组的形式返回
return messageBuffer.toByteArray();
}
}
以上所述是小编给大家介绍的Java的TCP/IP编程学习--基于定界符的成帧详解整合,希望对大家有所帮助.
来源:https://blog.csdn.net/qq_39400984/article/details/88697835
0
投稿
猜你喜欢
- 概述:Spring Boot 2.0相对于之前的版本,变化还是很大的。首先对jdk的版本要求已经不能低于1.8,其次依赖的spring的版本
- Android Studio 在引用外部依赖时,发现一直无法引用外部依赖。刚开始以为是墙的问题,尝试修改Gradle配置,未解决问题。最终发
- 在SpringBoot中,当需要获取到配置文件数据时,除了可以用Spring自带的@Value注解外,SpringBoot提供了一种更加方便
- 在阅读本文之前,大家可先参阅《简单理解Spring之IOC和AOP及代码示例》一文,了解下Spring中IOC和AOP的相关内容。下面进入正
- 本文实例讲述了Android中TextView显示插入的图片实现方法。分享给大家供大家参考,具体如下:Android系统默认给TextVie
- 一、什么是过滤器过滤器是对数据进行过滤,预处理过程,当我们访问网站时,有时候会发布一些敏感信息,发完以后有的会用*替代,还有就是登陆权限控制
- 要想实现android手机通过扫描名片,得到名片信息,可以使用脉可寻提供的第三方SDK,即Maketion ScanCard SDK,脉可寻
- 1. 使用try-with-resources简化文件读取操作:修改前:FileInputStream fis = null;try { &
- 本文实例讲述了Android编程实现WebView添加进度条的方法。分享给大家供大家参考,具体如下:标准的XML界面<?xml ver
- 顺序语句顺序顾名思义就是程序自上而下执行public class User { public static voi
- 一、什么是热部署?热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。二、什么是SpringBoot热部署?SpringBoot
- Spring Security 过滤器链及自定义Filter别名类名称Namespace Element or AttributeCHANN
- 一、注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan、@Configur
- 一、interrupt的使用特点我们先看2个线程打断的示例首先是可打断的情况:@Testpublic void interruptedTes
- 本文实例为大家分享了C# GDI+实现时钟表盘的具体代码,供大家参考,具体内容如下一、设计如下图界面按键“打开时钟&am
- 一般文本文件我们以日志文件.log文件为例:import java.io.BufferedReader; import java.io.Fi
- FTP(File Transfer Protocol)就是文件传输协议。通过FTP客户端从远程FTP服务器上拷贝文件到本地计算机称为下载,将
- Java基于对象流实现银行系统的具体代码,供大家参考,具体内容如下系统特点:数据持久化到文件中,系统启动后,加载文件中数据到集合中,相当于做
- spring容器是负责实例化、配置、组装组件的容器。容器的配置有很多,常用的是xml、Java注解和Java代码。在spring中Ioc容器
- 最近做一个需求,需求中的bean只用于生成一次json使用,所以想通过配置来动态的生成,查了一下,java还真有这个实现。java动态的生成