上次介绍到了关于客户端实时刷新摄像头所识别的图片的一些方法,采用了了UDP广播的技术做处理。理论上是没有问题的,将客户端运行在不同电脑上也能很好的看到效果,运行日志也没看出啥问题,结果今天翻看日志的时候发现提示缓冲区异常。加一个长度断点之后,发现了当图片转化的【byte】数组长度大于110K 的时候,就会出现缓冲区异常。日志部分截图如下

根据网上找的解决方案,大致是UDP广播默认发送的是短消息,数据量不会太大,这样大型图片的话有的长度会超过此默认范围,需要设置缓冲区大小,如下添加

//发送
//int nSendBuf = 200 * 1024;//设置为200K
//sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendBuffer,nSendBuf); //设置缓冲区
sock.SendTo(data, ipendPoint);

设置之后,确实能改善一些效果是,但是,在老大的提示下,为何非要传递图片,既然图片会保存到服务器的FTP上,为何不直接向客户端广播下 图片所在的ftp路径呢?顿时恍然大悟,本人刚开始做cs,很多地方还要学习,处理问题还不够灵活,于是果断的将图片内容转换为ftp地址,完美解决问题。这里还有个事情要记录下,关于图片转byte[] 数组的时候,按照惯性逻辑,先用文件流FileStream 加载图片所在的路径,然后创建一长度为流长度的byte 字节数组,再调用文件流的Read 方法,将图片流写入到byte字节数组中,最后在关闭文件流。实际上只需要一行代码就可以解决这些逻辑 ReadAllBytes方法可以直接将路径所在的文件转换为byte[] 数组,如下

 //图片路径
string temp = fileName + m_Guid + ".jpg";
//FileStream fs = new FileStream(temp, FileMode.Open, FileAccess.Read);
//int length = (int)fs.Length;
//byte[] bytes = new byte[length];
//fs.Read(bytes, 0, length);
//fs.Close();
//直接将路径所在的文件转化为byte[] 数组
byte[] bytes = new byte[File.ReadAllBytes(temp).Length];

作为cs的小白,以后确实要加紧,IO流、线程的学习

UDP广播-缓冲区过小的更多相关文章

  1. UDP广播 与 TCP客户端 --服务端

    随着倒计时的响声,自觉无心工作,只想为祖国庆生. 最近有遇到过这样一个问题,将摄像头识别的行人,车辆实时显示在客户端中.有提供接口,会以Json的数据的形式将实时将识别的对象进行Post提交.所以我们 ...

  2. 利用Docker技术实现UDP广播效果(网络编程python版)

    docker的安装见官方文档 我使用的系统为Ubuntu16.04 Ubuntu系统安装docker文档地址:https://docs.docker.com/engine/installation/l ...

  3. 给Hi3518e的Uboot添加UDP广播收发功能

    基于个人兴趣,决定实现一个和方案公司提供的uboot收发广播的功能.记录笔记如下. SDK版本:Hi3518E_V100R001C01SPC081 1. 由于我手头的板子的Phy是RMII模式,因此先 ...

  4. NetworkComms V3 之发送UDP广播消息

    NetworkComms网络通信框架序言 NetworkComms通信框架,是一款来自英国的c#语言编写的通信框架,历时6年研发,成熟稳定,性能可靠. NetworkComms v3目前只支持基本的U ...

  5. Android杂谈--HTC等手机接收不到UDP广播报文的解决方案

    最近遇到个问题,在android手机上发送UDP报文的时候,HTC等机型(测试用HTC new one)接收不到广播报文,而其他的samsung, huawei, xiaomi, nexus等等均没有 ...

  6. [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现

    转自:http://www.cnblogs.com/zhili/archive/2012/09/03/2666974.html 上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享 ...

  7. c# socket udp广播

    一.广播消息 由于Tcp是有连接的,所以不能用来发送广播消息.发送广播消息,必须用到Udp,Udp可以不用建立连接而发送消息.广播消息的目的IP地址是一种特殊IP地址,称为广播地址.广播地址由IP地址 ...

  8. 通过UDP广播实现Android局域网Peer Discovering

    本文是对个人笔记中内容的整理,部分代码及图片来自互联网,由于不好找到原始出处,所以未加注明. 如有痛感,联系删除. 本文将介绍以下知识点: TCP与UDP的区别: 单播.多播.广播: Java中实现U ...

  9. 【Netty】UDP广播事件

    一.前言 前面学习了WebSocket协议,并且通过示例讲解了WebSocket的具体使用,接着学习如何使用无连接的UDP来广播事件. 二.UDP广播事件 2.1 UDP基础 面向连接的TCP协议管理 ...

随机推荐

  1. python学习笔记1-python相关应用套件

    完整的数据分析套件 统计科学计算 Numpy,Scipy,statsmodels 深度学习 TensorFlow,MXNET 结构化数据处理与分析 Pandas 大数据处理 PySpark 数据探索编 ...

  2. __x__(38)0909第五天__雪碧图的制作

    1. 用ps打开目标图片若干. 2. 调整合适的画布大小. 3. 将图片拖曳到一张里. 4. 存储为Web所用格式,选择 png24 .

  3. centos7下部署nginx与php

    背景介绍 相信读者在看这篇文章之前已经fastcgi,php-fpm有所了解.大概来讲php语言需要fastcgi程序,即php解释器解释,而php解释器需要php-fpm管理器进行调度. 以下对CG ...

  4. python多进程使用及线程池的使用方法

    多进程:主要运行multiprocessing模块 import os,time import sys from multiprocessing import Process class MyProc ...

  5. Myeclipse的使用技巧

    1.1.MyEclipse自定义注释   一.修改进入路径:  Window->Preference->Java->Code Style->Code Template-> ...

  6. Ubuntu mysql连接错误10060/10061的方法

    mysql 10060错误一般因为防火墙 ufw allow 3306; //允许外部访问3306端口ufw allow from 192.168.1.115;  //允许此IP访问所有的本机端口uf ...

  7. 源码包安装mysql5.6

    含有的命令:wget,tar,cp,groupadd,useradd,chown,service,chkconfig,exportsource,mysql_secure_installation,my ...

  8. C#的托管与非托管大难点

    托管代码与非托管代码 众所周知,我们正常编程所用的高级语言,是无法被计算机识别的.需要先将高级语言翻译为机器语言,才能被机器理解和运行.在标准C/C++中,编译过程是这样的:源代码首先经过预处理器,对 ...

  9. Redis做LRU缓存

    当Redis用作缓存时,通常可以让它在添加新数据时自动逐出旧数据. 这种行为在开发人员社区中非常有名,因为它是流行的memcached系统的默认行为. LRU实际上只是支持的驱逐方法之一. 本页介绍了 ...

  10. dddquickly

    在项目开发最初的时候,他也有过一段狂欢般的快乐时光,不久之后,事情就越来越艰难. 项目的代码越来越难以维护,工作越来越像是一种煎熬,合作的同事对他越来越不满. “该是与这个项目,与这个公司说 bye ...