博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tcp读取数据的方法
阅读量:6443 次
发布时间:2019-06-23

本文共 2448 字,大约阅读时间需要 8 分钟。

首先说个废话我是做商场的- -今天开始pos项目正式部署赞一个^_^......在这个项目中用了个中间层,用tcp来回传递数据。。。但一直有个毛病,不能传输超量的数据~ ~我的定的是5mb一次传输超过这个就丢包,后来才用,发送数据的时候首先扩展前8位,然后再在发送,这前8位就是数据长度~~好麻烦,接收了后在根据读取的流-去数量直到读取完毕。。。。。。。今天看到一个佛洛依德哥特式的方法,就是蒙人...:首先我发送10mb数据,首先接收5mb,检查下如果还有一个字节,在扩展5mb。。。。直到读取完毕哈哈我觉得好用...最起码省事情~ ~就是浪费了点内存。贴出源码来大家分享下............

 

 

 

using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; namespace TcpDll {
public delegate void MyDelegate(string temp); /// /// 控制网络流的对象 /// public class ClientTcp {
//设置网络流局部对象 private NetworkStream ns; //声明类型为MyDelegate的事件MyEvent public event MyDelegate MyEvent; /// /// /// /// public ClientTcp(NetworkStream ns) {
this.ns = ns; } /// /// 接收对象通过 MyEvent 抛出流 /// public void Read() {
//获得相关的封装流 //StreamReader sr = new StreamReader(ns); //string temp = sr.ReadLine(); //接收到客户端消息后触发事件将消息回传 //MyEvent(temp); //StreamWriter sw = new StreamWriter(ns); //转换为大写后发送消息给客户端 //sw.WriteLine(temp.ToUpper()); //sw.Flush(); // sw.Close(); //sr.Close(); } /// /// /// /// 发送流 /// 接收大小 ///
返回流
public static byte[] Read2Buffer(Stream stream, int BufferLen) {
//// 如果指定的无效长度的缓冲区,则指定一个默认的长度作为缓存大小 //if (BufferLen < 1) //{
// BufferLen = 0x8000; //} // 初始化一个缓存区 byte[] buffer = new byte[BufferLen]; int read = 0; int block; // 每次从流中读取缓存大小的数据,直到读取完所有的流为止 while ((block = stream.Read(buffer, read, buffer.Length - read)) > 0) {
// 重新设定读取位置 read += block; // 检查是否到达了缓存的边界,检查是否还有可以读取的信息 if (read == buffer.Length) {
// 尝试读取一个字节 int nextByte = stream.ReadByte(); // 读取失败则说明读取完成可以返回结果 if (nextByte == -1) {
return buffer; } // 调整数组大小准备继续读取 byte[] newBuf = new byte[buffer.Length * 2]; Array.Copy(buffer, newBuf, buffer.Length); newBuf[read] = (byte)nextByte; // buffer是一个引用(指针),这里意在重新设定buffer指针指向一个更大的内存 buffer = newBuf; read++; } } // 如果缓存太大则使用ret来收缩前面while读取的buffer,然后直接返回 // byte[] ret = new byte[read]; // Array.Copy(buffer, ret,read); //return ret; return buffer; } } }

转载于:https://www.cnblogs.com/angellapples/archive/2011/09/07/2169346.html

你可能感兴趣的文章
Spring quartz 单机、集群+websocket集群实现文本、图片、声音、文件下载及推送、接收及显示...
查看>>
SPOJ104 Highways,跨越数
查看>>
使用rman备份异机恢复数据库
查看>>
Win7-64bit系统下安装mysql的ODBC驱动
查看>>
自己做一款简易的chrome扩展--清除页面广告
查看>>
node中非常重要的process对象,Child Process模块
查看>>
Webserver管理系列:3、Windows Update
查看>>
Linux内核源码详解——命令篇之iostat[zz]
查看>>
Sqlserver2000联系Oracle11G数据库进行实时数据的同步
查看>>
duplicate命令创建physical standby数据库报RMAN-03015 ORA-17628
查看>>
明年计划
查看>>
ORACLE功能GREATEST功能说明具体实例
查看>>
unity, particle play once and destroy
查看>>
hadoop job解决大数据量关联时数据倾斜的一种办法
查看>>
windows配置nginx实现负载均衡集群
查看>>
摄像机知识
查看>>
小tip:纯CSS让overflow:auto页面滚动条出现时不跳动
查看>>
Linq Like
查看>>
Linux知识积累(4) Linux下chkconfig命令详解
查看>>
centos关机与重启命令
查看>>