|
|
导航: |
论坛 -> 网络通讯
斑竹:liumazi,sephil |
|
作者: |
|
2020/3/31 17:34:14 |
标题: |
求个TClientSocket+TServerSocket传输超长字符串的例子 |
浏览:2320 |
|
加入我的收藏 |
楼主: |
求个TClientSocket+TServerSocket传输超长字符串的例子 字符串长度51万个字符,请各位大神赐教,我是新手,弄了几天都不行,谢谢!
----------------------------------------------
|
作者: |
|
2020/3/31 18:22:19 |
1楼: |
压缩,搞成 stream
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
|
作者: |
|
2020/3/31 18:57:30 |
2楼: |
什么模式的?如果是应答模式的话,那就一边发了另一边直接循环收,收到没数据了再确认就可以了。 如果是异步的,那这俩控件不适合你,win平台找找iocp的三方库,xnux平台找找epoll的三方库。
----------------------------------------------
--
|
作者: |
|
2020/3/31 21:50:42 |
3楼: |
收发51万个字符的代码和收发5个字符的代码是完全一样的
----------------------------------------------
-
|
作者: |
|
2020/3/31 21:55:38 |
4楼: |
不一样,字符太多一次收不完,求个能收完的例子
----------------------------------------------
|
作者: |
|
2020/3/31 22:30:36 |
5楼: |
一样的,就照搬5个字节的收发方法即可
----------------------------------------------
-
|
作者: |
|
2020/4/1 13:46:57 |
6楼: |
51万个字符 英文的话不过500K,中文不过1M 一条TCP包确实不太好 不过你不要满脑子只想一次性就发过去,思路开阔一下 创建流 从文件读入到流 计算长度,按每次发1024字节算 你就得到498次的结果 循环498次 每次发送流(流,1024*次) 每次发送完睡一会,10毫秒就好
以上,不考虑粘包 好了,描述完了,翻译成代码就好了
----------------------------------------------
-
|
作者: |
|
2020/4/1 14:02:29 |
7楼: |
这还要代码??反复recv一直到0结束不就完了么?
----------------------------------------------
--
|
作者: |
|
2020/4/1 16:20:26 |
8楼: |
你将你发送接受5字节的那段代码,将那个数字5,改成51万就可以了,真的,我试过
----------------------------------------------
-
|
作者: |
|
2020/4/2 11:47:13 |
9楼: |
分批发送
----------------------------------------------
Everyone will to do best!
|
作者: |
|
2020/4/2 13:21:09 |
10楼: |
之前我也遇到这个问题,搞两个全局变量,一个是接收到的数据大小,一个是接受缓存stream。 { 如果 接受到数据=0,// {先判断帧头,找到开始 则把接收缓冲区的数据放到全局的那个stream里,然后接受数据大小:=缓冲区大小;} 如果接受到数据不等于0 全局的那个stream移位到最后一个, 则把接收缓冲区的数据放到全局的那个stream里,然后接受数据大小:=缓冲区大小+然后接受数据大小; } 最后看下接收到的总长是不是大于等于你的帧长,如果是,完整一帧收到,接受到数据:=0
----------------------------------------------
-
|
作者: |
|
2020/4/4 15:41:38 |
11楼: |
先发要发送的长度给服务器,服务器循环收取,直到指定长度。 说实话,没有定义包直接发送字符串有点垮。
----------------------------------------------
简单做人,认真做事。
|
作者: |
|
2020/4/5 1:27:04 |
12楼: |
超长字符串就是文件嘛。
看上面很多人说分包,沾包,定义包。
如果业务不复杂,没必要。TCP 就是一个水管,往里面倒水就好了。多少水不重要
当然,接收端需要知道有多少水,否则收完了也不知道还在傻傻地收永远也不来的数据。
----------------------------------------------
-
|
作者: |
|
2020/4/6 16:20:02 |
13楼: |
不需要考虑包的问题,11楼的做法可行,我就这样做过,传二进制数据都没问题,已经用于实现项目中。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
vga (vga) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2020/4/20 13:44:25 |
14楼: |
楼上: 接收 多个客户端的数据是否需要 区分 处理 ?
----------------------------------------------
-
|
作者: |
|
2020/4/20 21:05:45 |
15楼: |
TServerSocket可以用多线程支持多个客户端,每个线程对应一个客户端。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
vga (vga) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2020/4/21 5:32:52 |
16楼: |
多谢 iamdream!
----------------------------------------------
-
|
|