DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: webb123
今日帖子: 10
在线用户: 26
导航: 论坛 -> 网络通讯 斑竹:liumazi,sephil  
作者:
男 fuhoutun (fuhoutun) ★☆☆☆☆ -
普通会员
2020/9/22 9:50:25
标题:
idtcpserver如何主动向idtcpclient发送数据,客户端如何接收,菜鸟谢谢高手。 浏览:1787
加入我的收藏
楼主: idtcpserver如何主动向idtcpclient发送数据,客户端如何接收,菜鸟谢谢高手。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/9/22 10:22:20
1楼: 理想网络下。
CLIENT 连上 SERVER。
然后 告诉对方 CLIENT 的 IP 和 PORT。
然后 SERVER 就能 主动给 CLIENT 发信息了,其实 就是 C S  对调了。

但是 目前没有这种理想网络了。
都是 需要 NAT的。
所以。为了 不 NAT。
都是  C 访问 S。
然后 不断开。这样 S 就能 一直给 C 发消息啊。也没有 什么问题啊。
如果 你 断开了,就让 C 重新去连 S 啊。

如果 你 S 主动给 C 的 IP 和 PORT 发信息,可能会被 中间的各级 路由给拒绝掉。 即便没有被拒绝通信。你的 C 也没监听 PORT 啊。
如果 一个程序 监听 PORT,按他就是 S ,不是 C 了。

NAT 是一种 用于 P2P 或 C2C 的技术。
但是 NAT 比较麻烦,还不如 C 和 S 不断开,简单呢。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 fuhoutun (fuhoutun) ★☆☆☆☆ -
普通会员
2020/9/22 10:42:27
2楼: 谢谢!

客户机主动发送(代码来自网络)
var
 I: Integer;
 ConnContext: TIdContext;
 begin
 with IdTCPServer1.Contexts.LockList do
 try
 for I := 0 to Count - 1 do begin
 ConnContext := TIdContext(Items[I]);
 ConnContext.Connection.IOHandler.Write(…);
end;
 finally
 IdTCPServer1.Contexts.UnlockList;
 end;
 end;

客户机接收
procedure TFormClient.IdTCPServerExecute (AContext: TIdContext);
var
  Msg:    string;

begin
  Msg:=IdTCPClient.IOHandler.ReadLn;
end;
但客户机没有响应,不知为什么?谢谢高手指教。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/9/22 11:27:39
3楼: 如果你连接已经建立,服务器端拿到 Context 后发送,客户端是可以收到的。

莫非你的服务器端的 Write 里面的省略号,不是 WriteLn ?

你要知道 ReadLn 是什么意思才行。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/9/22 11:32:16
4楼: 写了一堆,白写。爱咋咋的吧。关我屁事。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 fuhoutun (fuhoutun) ★☆☆☆☆ -
普通会员
2020/9/23 2:55:12
5楼: 回复3楼:谢谢!Write 里面的省略号我在程序中用的是字符串‘abc’。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/9/23 10:50:46
6楼: 读如果是 ReadLn,那么写就必须是 WriteLn

如果仅仅是 Write,发送的 abc 没有行结尾符号。而 ReadLn 必须要读到行结尾符号才算完, 所以就一直堵塞等待。

这里的行结尾符号是回车还是换行,还是回车加换行符,我也不清楚。不过你可以在 Write 的 'abc' 后面加速回车符或者换行符试试。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行519.5313毫秒 RSS