TCP传输延迟问题

G_laoer 2017-09-17 08:33:19
如题,最近在用C#做一个TCP传输的东西,实现情况是我先会给服务器传过去一个自定义的数据包,总共八个字节,然后数据包包含接下去要传输的文件类型和文件需要传输的大小,主要问题出在服务器接收我八个字节的指令的时间是接收文件的三倍以上,我的文件一般在50k-70k左右。请问这种情况大致原因是啥以及有效的解决方法,求大佬指教
...全文
765 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰冷的小爪 2017-09-21
  • 打赏
  • 举报
回复
找一个靠谱的通信协议,起码要有数据开头标记,结束标记,数据校验,这样才万无一失吧
  • 打赏
  • 举报
回复
另外,其实更需要搞清楚的是你具体在什么位置来记录log,你的代码的处理流程(判断所谓的8字节内容的程序部分)是否本身就很卡。这个需要仔细研究你自己的代码。
  • 打赏
  • 举报
回复
引用 2 楼 G_laoer 的回复:
就是服务器那边用log打印,然后开始接收到指令包八个字节接收完毕的时间,然后开始接收文件的时间到接收结束的时间,这两个时间差作比较,发现前八个字节所用时间是后面的接收行为的三倍左右,传很多个文件也是如此
你的计时代码可能本身就不是不精确的,比如说它有几百毫秒误差,而这个动作本身才几十毫秒,怎么能精确计时?
wanghui0380 2017-09-20
  • 打赏
  • 举报
回复
正式因为你的报文设计有问题,因为人家不知道你的报文头尾,他只能根据报文长短判定,同时tcp是流式传输,其实根本就没有什么刚刚好的8字节 你可以看看所有成熟的产品设计的tcp报文是怎么设计的,然后在来谈后面的问题。 报文头+会话标识+数据帧数量+数据帧序号+本帧数据长度+本帧数据区+ 校验码 这是相对比较复杂的报文,当然你还可以加时间戳(通常Udp的报文会有时间戳) 当然如果你简单点可以是 报文头 +功能码+数据区+报文尾 就你的要求其实一个报文就可以。 报文头+文件长度+文件内容+校验
G_laoer 2017-09-20
  • 打赏
  • 举报
回复
就是服务器那边用log打印,然后开始接收到指令包八个字节接收完毕的时间,然后开始接收文件的时间到接收结束的时间,这两个时间差作比较,发现前八个字节所用时间是后面的接收行为的三倍左右,传很多个文件也是如此
xian_wwq 2017-09-18
  • 打赏
  • 举报
回复
“主要问题出在服务器接收我八个字节的指令的时间是接收文件的三倍以上” 这个是怎么测试的? socket收发根本不认识什么是指令,什么是文件,它只认byte[]

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧