Socket(Tcp)传输在流前面加标识
来源:互联网 发布:手机赚钱软件 编辑:程序博客网 时间:2024/05/16 16:21
开发中遇到一个这样的需求,两台手机建立一个局域网进行Tcp传输数据,其中需要传输 字符串、bitmap、xml文件等等。。。因为是不同类型的数据所以在服务端接收的时候需要用不同的解析方式来解析此次得到的流,所以这里就存在一个蛋疼的问题我要怎么知道此次传输的是什么类型的数据呢?这就是本篇博客要讲的在流前面加标识。
1.所未添加标识,也就是自己定义一个协议来约束传输行为,按照自己定义的规则来执行。如果对Socket不太熟悉的可以看下这篇博客,看下发送端
Socket s = new Socket(serverAddress, 10086);OutputStream out = s.getOutputStream();out.write("1#启动成功".getBytes());//1#就是我们加的标识s.close();
2.接收端
ServerSocket ss = new ServerSocket(10086);Socket accept = ss.accept(); //3.获取客户端发送过来的数据InputStream in = accept.getInputStream();int count = 0;while (count == 0) {//获取流的长度 count = in.available();} String flag = getBodyLength(in);//获取流前面的标识 //这里的flag就会是我们的1#了,那我们就可以使用对应的解析方式了 //继续解析也就只能获取标识后面的数据了,这也正式我们想要的 switch (flag) { case "1#"://解析字符串 pullString(in); break; case "2#"://解析图片 pullBitmap(in); break;
public final int headerBufferSize = 2;//每次要读取流头部的长度public synchronized String getBodyLength(InputStream is) throws IOException { byte[] b = readIs2(is, headerBufferSize); return new String(b, "UTF-8"); }public synchronized byte[] readIs2(InputStream is, int len) throws IOException { byte[] data = new byte[len]; int i = 0; while (i < len) { int r = is.read(data, i, len - i); if (r <= 0) { return data; } i = i + r; } return data; }
这里再提供一个方法,将两个字节数组合并为一个字节数组
//合并和的效果就是,把bytes_1放在最前面,bytes_2在后面public static synchronized byte[] mergerByte(byte[] bytes_1, byte[] bytes_2) { byte[] bytes = new byte[bytes_1.length + bytes_2.length]; System.arraycopy(bytes_1, 0, bytes, 0, bytes_1.length); System.arraycopy(bytes_2, 0, bytes, bytes_1.length, bytes_2.length); return bytes; }
如果帮到了你就动个小指顶一下吧
3 0
- Socket(Tcp)传输在流前面加标识
- Socket编程(一)TCP传输文件
- Socket TCP传输数据
- Haproxy在socket/tcp下传输数据的使用实例
- TCP与UDP在socket中传输通信的区别
- 网络编程__【TCP传输】(重点)【Socket & ServerSocket】
- socket学习(一)tcp传输文件的小程序
- OpenCV结合socket进行实时视频传输(TCP协议)
- 基于TCP的Socket文件双向传输(可并发)
- 基于socket(TCP)和opencv的实时视频传输
- PHP在变量前面加&是什么意思
- 在字符串的数字前面加*号
- 在类前面加[Serializable]的作用
- PHP在变量前面加&是什么意思?
- 【视频传输】二、Opencv结合socket进行视频传输(TCP协议)
- 【视频传输】一、Opencv结合socket进行视频传输(TCP协议)
- java Tcp Socket 传输图片代码
- Java实现Socket的TCP传输实例
- 网络爬虫学习笔记(二) 如何开发一个简单的爬虫
- 洛谷 P1122 最大子树和
- MVC框架
- 59.3Sum Closest-最接近的三数之和(中等题)
- Eighty seven (bitset优化) 在n个数中取m个数和为k
- Socket(Tcp)传输在流前面加标识
- 只要情结,不管实用的loT集锦
- 如何用Qt打开Android图像库
- WPF 高质量教程(转载自圣殿骑士)
- JAVA子类对象访问父类被重写方法
- Unity3d-XML将一个”非”xml的字符串变成规范的xml格式
- web前端-CSS Backgrounds-004
- Markdown Template
- HDU 2063 过山车 (二分图匹配之匈牙利算法)