如题:用tcp协议进行数据的收发!我想知道数据包(报)的原理!也就是数据是以类似一个字符串的方式发送吗?我不会抓包,所以不太知道原理!还有就是我的缓存问题!我的客户端和服务端都要设置?如果接收或发送信息大于缓存?出现什么结果?
解决方案 »
- fileSystemWatcher 的一点问题
- 有无人用C#写外挂呢?我想写个DNF的外挂吖,哈哈,有无高手给段代码学习学习吖!
- C#DataGridview读取数据怎么读不出来呢
- C# : 一 个 注 册 事 件 的 写 法 问 题
- 问几个基本的问题,顶者有粪!!!!!!!!!!!!!!!!!!!!!!!!!!
- 关于ACCESS数据库连接的问题
- 如何用代码 将数据集绑定到数据适配器上
- 怎么样在C#里执行无参数的存储过程?
- 【国际化开发的问题】:偶只想实现界面上的国际化(即包含中、港、英三种显示方式),怎么做?
- c# & windows程序设计!
- winform 条码打印设计
- 求大家帮完善这段代码...
首先我有个要发送的信息我定义为string sendmessage=“该字符串的长度不定”;
const int BufferSize = 1024;//定义缓存大小为1024字节
然后我创建个缓存数组byte[] buffer = new byte[BufferSize];
我现在是直接将字符串buffer = Encoding.Unicode.GetBytes(sendmessage);/将字串转码
然后用send或NetworkStream发送或写入
因为我对数据包根本不了解所以想知道我这么做的缺点还有如何应用数据包?
http://www.cnblogs.com/goodcandle/archive/2005/12/10/socket.html
一般处理:定义消息头,消息体,消息头包括,该包的长度,版本等信息,这个头必须是定长的,
消息体是变长,存放实际的数据
至于能够发送多大的包,我没做过实验,但一般大小的都能发送.
在IP层里面会自动分包,最大传输单元(MTU)TCP一般是不会丢包的,每次在传输数据时都会有确认握手.所以不必考虑丢包问题
简单的给你解释,TCP 仅适合传数据,数据一次性传多少完全由你控制,假设你传输的是一个文件,文件大小是10G,那么由于普通计算机内存达不到10G,所以缓冲区大小也没法设置为10G,所以拆包多次发送是必须的。
那么多个包时如何判断这个文件是否传输完毕了呢?
这就得设定相应的协议了,比如你判断到包里的数据最后是以/R/N结尾的就认为文件结束了。
所以TCP传输的基础之上往往会使用其他的协议,比如FTP。
建议楼主改用WS或WCF,后续研究TCP吧