TCP二进制流接收

前几天,模拟了一个tcp发送与接收16进制的小程序。由于需求的改变现在需要接收二进制流式数据,下面记录一下客户端接收数据的实现的源码。
package client;

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

public class ClientSocket {
    static Socket socket = null;
    static InputStream in = null;
    public final static transient byte DL_A0 = (byte) 0xa0;//自定义“协议”分割符
    public final static transient byte DL_AF = (byte) 0xaf;

    public static void main(String[] args)  {
    	try{
            socket = new Socket("127.0.0.1", 8080);
            in = socket.getInputStream();
        DataInputStream dis = new DataInputStream(in);
        /*根据分隔符定位开始标记--start*/
			while (dis.available()>0) {

			        if (dis.readByte() == DL_AF) {
			            break;
			        }
			}
        /*根据分隔符定位开始标记--end*/
        int count = 0; //记录接收一组数据的个数
        int ecount = 0;
        Short[] temp = new Short[4];
        /*定义存放转换后8组x1、y1、x2、y2数据的数组--start*/
        int[] x1Array = new int[8];
        int[] y1Array = new int[8];
        int[] x2Array = new int[8];
        int[] y2Array = new int[8];
        /*定义存放转换后8组x1、y1、x2、y2数据的数组--end*/
            while (true){//dis.available()方法当网络情况不是很好的情况下,很可能获取到的值是0,导致不能进入while循环。采用休眠1s的方法的话可以进入,但是也不能如期望的那样进行循环。此处需要做根据实际情况来。
            	count++;
             temp[count - 1] =dis.readShort();
                if (count == 4) {
                    ecount++; //下一组数据
                    x1Array[ecount - 1] = temp[0];
                    y1Array[ecount - 1] = temp[1];
                    x2Array[ecount - 1] = temp[2];
                    y2Array[ecount - 1] = temp[3];
                    dis.skipBytes(2);
                    if (ecount == 8) {
                        //TODO 各组数据处理
                        for (int i = 0; i < 8; i++) {
                            System.out.println("x1:" + x1Array[i]);
                            System.out.println("y1:" + y1Array[i]);
                            System.out.println("x2:" + x2Array[i]);
                            System.out.println("y2:" + y2Array[i]);
                        }

                        ecount = 0;
                    }
                    count = 0;
                }}}catch(IOException e){
                	e.printStackTrace();
                }finally{
                	try {
						in.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
                	try {
						socket.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
                }
            }

    }

时间: 2024-10-25 01:47:29

TCP二进制流接收的相关文章

php接收二进制流

/** 二进制流生成文件    * $_POST 无法解释二进制流,需要用到 $GLOBALS['HTTP_RAW_POST_DATA'] 或 php://input    * $GLOBALS['HTTP_RAW_POST_DATA'] 和 php://input 都不能用于 enctype=multipart/form-data    * @param    String  $file   要生成的文件路径    * @return   boolean    */    function b

【struts2】struts2中的流接收与流发送

[前言]在我们的struts2后端中,实现流的接收和发送.就能够实现向server传视频流以及下载图片. [流接收] 如今举一个传公钥的样例.struts2用一个action接收Key,而Key就是用http二进制流传过来的. 配置文件struts.xml写起来非常easy: <action name="key" class="com.seeplant.action.PublicKeyAction" method="key"> <

转:php park、unpark、ord 函数使用方法(二进制流接口应用实例)

在工作中,我也逐渐了解到park,unpark,ord对于二进制字节处理的强大. 下面我逐一介绍它们. park,unpark,ord这3个函数,在我们工作中,用到它们的估计不多. 我在最近一个工作中,因为通讯需要用到二进制流,然后接口用php接收.当时在处理时候,查阅不少资料.因为它们使用确实比较少,也很少朋友工作中会用到它们. 在工作中,我也逐渐了解到park,unpark,ord对于二进制字节处理的强大. 下面我逐一介绍它们. park,unpark,ord函数使用介绍 park函数说明:

php pack、unpack、ord 函数使用方法(二进制流接口应用实例) 转

php pack.unpack.ord 函数使用方法(二进制流接口应用实例) 博客分类: PHP php二进制packunpackord 在工作中,我也逐渐了解到pack,unpack,ord对于二进制字节处理的强大. 下面我逐一介绍它们.在我们工作中,用到它们的估计不多. 我在最近一个工作中,因为通讯需要用到二进制流,然后接口用php接收.当时在处理时候,查阅不少资料.因为它们使用确实比较少,也很少朋友工作中会用到 它们. 在工作中,我也逐渐了解到pack,unpack,ord对于二进制字节处

php pack、unpack二进制流接口应用实例

在工作中,我也逐渐了解到pack,unpack,ord对于二进制字节处理的强大. 下面我逐一介绍它们.在我们工作中,用到它们的估计不多. 我在最近一个工作中,因为通讯需要用到二进制流,然后接口用php接收.当时在处理时候,查阅不少资料.因为它们使用确实比较少,也很少朋友工作中会用到它们. 在工作中,我也逐渐了解到pack,unpack,ord对于二进制字节处理的强大. 下面我逐一介绍它们. pacrk函数说明:本函数用来将资料压缩打包到位的字符串之中. 语法:pack(format,args+)

ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践

写在前面 :从提出需求到完美的解决问题,实现过程是曲折的. 需求:在前(web client)后(Restful Service)端完全解耦的模式框架下,webclient需要请求 Service 返回的图片文件(二进制流),并在client端显示. 第一步思考:拿到此需求, 基于程序员的狂妄心里,思考到显示图片而已,jquery ajax直接get请求 将返回data 赋值给img标签的src属性即可嘛,so easy~ 不知天高地后的小子开始码代码,经过几分钟给出了以下的代码,并自信满满的准

socket传送二进制流的一些总结

第一次实质性的接触socket通信方面的工作,所以遇到的问题还真不少,写篇博客记录一下,提升下记忆. 需求是通过私有协议进行二进制数据的传输,必须保证数据包不能被丢失,所以选择tcp的socket进行通信. 1. 遇到的第一个问题是客户端与服务端的socket通信没有保持持续的连接状态 这个是一个想当然的错误.想当然的以为TCP是有连接的通信,但是你如果长时间不通信,服务端一直保持着通信,这对服务器资源是一种极大的浪费.客户端与服务端的连接是需要占用一定资源的,而服务端的资源是有限的.如果一直保

使用C#向Sql Sever中存取网络图片和本地图片(二进制流的形式)

先是做普通的,存储我们本地的图片,将它转化为二进制流存储到数据库对应的表中. 代码如下: string path = "../../A.jpg"; FileStream fs = new FileStream(path, FileMode.Open); int streamLength = (int)fs.Length; //获取文件流的长度. byte[] image = new byte[streamLength]; //声明字节数组,用于保存图片文件 fs.Read(image,

python+ mysql存储二进制流的方式

很多时候我们为了管理方便会把依稀很小的图片存入数据库,有人可能会想这样会不会对数据库造成很大的压力,其实大家可以不用担心,因为我说过了,是存储一些很小的图片,几K的,没有问题的! 再者,在这里我们是想讲一种方法,python+ mysql存储二进制流的方式 这里用的是Mysqldb,python里面最常用的数据库模块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33