DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: webb123
今日帖子: 40
在线用户: 27
导航: 论坛 -> 网络通讯 斑竹:liumazi,sephil  
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2022/10/27 9:35:10
标题:
[delphi-Cross-Sockets]本地发送/接受没问题,真实网路丢包严重! 浏览:2634
加入我的收藏
楼主: 同一份代码,编译出同一个 exe,在本机[127.0.0.1]中测试,无论文件大小,接收发送都是成功。
然而,在真实网路中用两台电脑测试文件传送,或者在虚拟机中主机测试,小文件是可以的,大于 2G 的文件,每次接收完的总字节数都不一样,竟然还能这样??
我的想象是:即使我的计算方法有问题,每次收到的总字节数也应该是不变的啊,不可能一会多一会少吧?
  还请有空的朋友们帮忙看一下,我究竟哪里错了?还是说这个通讯库底层有问题?
这个库的好处是不用安装,发送接收速度也蛮快。
我的开发环境:
delphi 11.2 / win11_x64
此帖子包含附件:sail2000_2022102793415.zip 大小:10.26M
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/10/27 13:30:03
1楼: 收发文件,最简单的还是用 FTP。

FTP 本质上就是一条 TCP 流。这个肯定是稳定的。

不知道你说的这个它的工作原理,不好判断。

如果采用 TCP,理论上是不会丢的。

如果用 UDP,那就要自己用代码来处理丢包的情况了。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/10/27 13:36:25
2楼: 不知道楼主这个收发文件的功能,是用在什么地方?

假设两边都是内网,用 TCP 就麻烦了。当然,也可以通过服务器中转的方式来使用 TCP。

假设两边都是内网,想要 P2P 直通,用 UDP 打洞的方式来做,那就要自己的代码处理 UDP 丢包的问题。现在也有很多类似的协议或者库,比如 QUIC,但相关的 Delphi 的资源很少。

在系统层,至少目前 Chrome 浏览器已经支持 WebRTC,它就已经把 P2P 直连和 UDP 丢包的处理都解决了。可惜 Delphi 相关的资源非常少。

03年的时候,什么 QUIC,WebRTC 之类的东西都不存在,我自己用 Delphi 实现了一套打洞,UDP 丢包处理等等等东西,传文件也是非常稳定的。现在既然有了 WebRTC 这样的东西,就要考虑如何把它用起来,而不是自己写代码了。毕竟 Google 这样的公司的实现,肯定比我自己写的,水平高多了。

目前国内腾讯之类的大厂,也都支持 WebRTC 了。
----------------------------------------------
-
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2022/10/27 14:03:23
3楼: 一个以前写的跨平台文件传输APP,因为早段时间换了新的大屏安卓车机,装了这个我自己写的APP在上面,觉得界面和功能都有待改进的地方,通讯用的是 Indy。
刚开始用的确实是 Indy 的 FTP,后来改为 httpserver,又改用 TCP,现在想用别的通讯套件来试一下,NETCOM7 这个也试过了,但它不支持IOS,也没它传说中的那么快(作者说比indy快很多),现在想看看 delphi-Cross-Sockets 这个。

WebRTC 确实没接触过,Alcinoe 好像有个支持 WebRTC 的组件,我去看看。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/10/27 14:35:58
4楼: 如果你仅仅是局域网内传个文件,使用 FTP 是最简单的。我刚刚用 Indy 的 FTP 写了一个给安卓机传几百个文件的 APP,运行稳定得很。至于说速度,Indy 的 TCP 在局域网里面的速度,就只看网- 那个 -络带宽了,和控件无关。因为 FTP 其实就是 TCP 流,没有拆包分包这些东西,所以速度不会有问题的。

如果你要跨网 - 那个 - 络通过 Internet 传,简单又保险的做法还是使用 TCP,只不过加上中间有个中转服务器。用 TCP 的流直接传,其实也就是类似 FTP 了。当然代码实现起来稍微复杂一点。

如果想代码实现起来简单,而且文件也不大,直接采用 WebService 做文件上传下载。这个也可以在安卓上运行的。

当然,你如果是有时间单纯想测试各种技术,那最好是去玩玩 WebRTC,这个也算目前比较新而且也是大厂开始广泛在玩的技术。我也想玩这个但没时间去摸索它。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/10/28 16:35:49
5楼: datasnap上传下载文件,使用流操作,无论服务器和客户端做何设置,传啥都没问题。
----------------------------------------------
-
作者:
男 jfhyn (贺兰之边) ★☆☆☆☆ -
普通会员
2022/10/29 0:06:49
6楼: 用ZNet的Tcp传输试试,都封装好了
----------------------------------------------
-
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2022/10/29 8:36:25
7楼: @6楼,是的,我也正刚刚从GitHub取回来看看
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2022/10/29 21:28:09
8楼: 我大致看了下你的代码。
          LConns[0].SendBuf(FBuffer, Length(FBuffer), // send buffer
          procedure(const AConnection: ICrossConnection; const ASuccess: Boolean)
          begin
          LResult := ASuccess;
          end);
FBuffer是TBytes。但是你这调用的重载函数是Pointer的那个。
调用SendBytes函数或者第一个参数传FBuffer[0]吧
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2022/10/31 9:08:32
9楼: 感谢 @8楼,wr960204 (武稀松) 的回复。
// LConns[0].SendBuf(FBuffer, Length(FBuffer), // 字节数不符
// LConns[0].SendBuf(FBuffer[0], Length(FBuffer), // 字节数一致,SHA256不对
LConns[0].SendBytes(FBuffer, // 字节数一致,SHA256一致,OK!

确定是这样,真是网路测试通过了。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2022/10/31 14:04:24
10楼: 再附:
LConns[0].SendBytes(FBuffer,// 字节数一致,SHA256一致,OK!
// 单文件不能大于1.5G?否则爆 out of memery

LConns[0].SendBuf(@FBuffer[0], Length(FBuffer), //字节数一致,SHA256一致,测试 5G 文件通过
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2022/11/2 20:34:56
11楼: delphi-Cross-Socket相当稳定,我用在项目中,几个月不关机正常运行。
----------------------------------------------
18114532@qq.com
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/11/2 21:49:15
12楼: 从 github 下载代码来大概看了一下 ICrossSocket = interface 这个声明。

看起来是实现了一个功能类似 TIdTCPServer 的一个 TCP Server ?
----------------------------------------------
-
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2022/11/3 10:38:48
13楼: delphi-Cross-Socket有TCPServer,TCPClient,HTTPServer(支持SSL),还有websocket server和client,websocket是能完整代码量比sgc的少一个量级。而且还跨平台。我只要涉及server的,都用delphi-Cross-Socket实现的。
----------------------------------------------
18114532@qq.com
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/11/3 14:13:32
14楼: 这些功能做完整还是很厉害了
----------------------------------------------
-
作者:
男 magiewang (magiewang) ▲▲▲△△ -
普通会员
2022/11/3 14:29:58
15楼: delphi-Cross-Socket的TCPServer是同步的还是异步的?
----------------------------------------------
-
作者:
男 hnxxcxg (咏南中间件) ★☆☆☆☆ -
盒子活跃会员
2022/11/4 18:55:24
16楼: delphi-Cross-Socket的TCPServer是异步的,它全部是异步的。
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
作者:
男 magiewang (magiewang) ▲▲▲△△ -
普通会员
2022/11/7 10:39:45
17楼: 异步做文件传输比较麻烦吧
----------------------------------------------
-
作者:
男 421 (421) ★☆☆☆☆ -
盒子活跃会员
2022/11/7 19:18:31
18楼: delphi-Cross-Sockets更新了,修正 POST 大文件数据不一致得问题
----------------------------------------------
-
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2022/11/19 17:06:12
19楼: @18楼,是的,我报了bug,几天就fix了,反应挺快的,我开始还以为作者忙工作去不管了捏。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
2022/11/19 19:04:59
20楼: 这东西弄一个查询服务器,好像挺好用。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 souledge (souledge) ★☆☆☆☆ -
普通会员
2022/11/22 11:16:58
21楼: 我是dcs的作者

感谢各位朋友还在坚持用这套代码

本人目前工作确实很忙,基本没时间去对dcs做更深层的打磨和改进,不过有比较严重的问题我还是会抽时间修改的,感谢发现并提交问题的朋友们

其实dcs的非Windows部分以及ssl的实现并不是很理想,但本人能力/精神有限,一直没有想到更好的实现方式,希望有想法/有能力的朋友能一起来完善dcs,欢迎去github提交

https://github.com/winddriver/Delphi-Cross-Socket

再次感谢
----------------------------------------------
-
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2022/11/24 9:50:02
22楼: Delphi-Cross-Socket有直接返回本机IP地址的方法吗,找了一下没找到。
----------------------------------------------
18114532@qq.com
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行93.75毫秒 RSS