DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: lijian100
今日帖子: 2
在线用户: 1
导航: 论坛 -> 网络通讯 斑竹:liumazi,sephil  
作者:
男 cenunus (cenunus) ★☆☆☆☆ -
注册会员
2020/3/31 17:34:14
标题:
求个TClientSocket+TServerSocket传输超长字符串的例子 浏览:1765
加入我的收藏
楼主: 求个TClientSocket+TServerSocket传输超长字符串的例子
字符串长度51万个字符,请各位大神赐教,我是新手,弄了几天都不行,谢谢!
----------------------------------------------
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2020/3/31 18:22:19
1楼: 压缩,搞成 stream
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。
又不靠它 delphi 吃饭,怕甚?
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2020/3/31 18:57:30
2楼: 什么模式的?如果是应答模式的话,那就一边发了另一边直接循环收,收到没数据了再确认就可以了。
如果是异步的,那这俩控件不适合你,win平台找找iocp的三方库,xnux平台找找epoll的三方库。
----------------------------------------------
--
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2020/3/31 21:50:42
3楼: 收发51万个字符的代码和收发5个字符的代码是完全一样的
----------------------------------------------
-
作者:
男 cenunus (cenunus) ★☆☆☆☆ -
注册会员
2020/3/31 21:55:38
4楼: 不一样,字符太多一次收不完,求个能收完的例子
----------------------------------------------
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2020/3/31 22:30:36
5楼: 一样的,就照搬5个字节的收发方法即可
----------------------------------------------
-
作者:
男 tzhxpc (老刘) ★☆☆☆☆ -
盒子活跃会员
2020/4/1 13:46:57
6楼: 51万个字符
英文的话不过500K,中文不过1M
一条TCP包确实不太好
不过你不要满脑子只想一次性就发过去,思路开阔一下
创建流
从文件读入到流
计算长度,按每次发1024字节算   你就得到498次的结果
循环498次
每次发送流(流,1024*次)
每次发送完睡一会,10毫秒就好

以上,不考虑粘包
好了,描述完了,翻译成代码就好了
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2020/4/1 14:02:29
7楼: 这还要代码??反复recv一直到0结束不就完了么?
----------------------------------------------
--
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2020/4/1 16:20:26
8楼: 你将你发送接受5字节的那段代码,将那个数字5,改成51万就可以了,真的,我试过
----------------------------------------------
-
作者:
男 grjs_2004 (grjsITname) ★☆☆☆☆ -
盒子活跃会员
2020/4/2 11:47:13
9楼: 分批发送
----------------------------------------------
Everyone will to do best!
作者:
男 crestxa (crestxa) ▲▲▲▲▲ -
注册会员
2020/4/2 13:21:09
10楼: 之前我也遇到这个问题,搞两个全局变量,一个是接收到的数据大小,一个是接受缓存stream。
{
如果 接受到数据=0,//
 {先判断帧头,找到开始
 则把接收缓冲区的数据放到全局的那个stream里,然后接受数据大小:=缓冲区大小;}
如果接受到数据不等于0
 全局的那个stream移位到最后一个,
 则把接收缓冲区的数据放到全局的那个stream里,然后接受数据大小:=缓冲区大小+然后接受数据大小;
}
最后看下接收到的总长是不是大于等于你的帧长,如果是,完整一帧收到,接受到数据:=0
----------------------------------------------
-
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2020/4/4 15:41:38
11楼: 先发要发送的长度给服务器,服务器循环收取,直到指定长度。
说实话,没有定义包直接发送字符串有点垮。
----------------------------------------------
简单做人,认真做事。
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/4/5 1:27:04
12楼: 超长字符串就是文件嘛。

看上面很多人说分包,沾包,定义包。

如果业务不复杂,没必要。TCP 就是一个水管,往里面倒水就好了。多少水不重要

当然,接收端需要知道有多少水,否则收完了也不知道还在傻傻地收永远也不来的数据。
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2020/4/6 16:20:02
13楼: 不需要考虑包的问题,11楼的做法可行,我就这样做过,传二进制数据都没问题,已经用于实现项目中。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 vga (vga) ★☆☆☆☆ -
盒子活跃会员
2020/4/20 13:44:25
14楼: 楼上: 接收 多个客户端的数据是否需要 区分 处理 ?
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2020/4/20 21:05:45
15楼: TServerSocket可以用多线程支持多个客户端,每个线程对应一个客户端。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 vga (vga) ★☆☆☆☆ -
盒子活跃会员
2020/4/21 5:32:52
16楼: 多谢  iamdream!
----------------------------------------------
-
作者:
男 tuhemm (刀锋土禾) ▲△△△△ -
禁用账号
2022/5/12 23:00:00
17楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
发布无用信息,禁用帐号!
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行52.73438毫秒 RSS