ServerSocket能否主动发消息

奔雷手 2012-10-20 05:47:02
ServerSocket ,ClientSocket
一台PC连接多个终端,但是前提是PC需要发消息到终端。
本是想PC作为 服务端 ,终端作为客户端,PC发送消息过去,终端会自动返回数据。
目前看到的资料均是 必须 由 客户端先发送消息到 服务端,服务端然后保存相关信息,然后再往客户端发送数据.

现在要求的是 客户端不首先发起通信,服务端根据数据库中保存的IP地址以及PORT 给每个客户端 轮询发送数据,客户端 返回数据。这个如何实现?
(也想过PC作为客户端,终端作为服务端,但是这样PC上不能够很好的反映当前所有终端的连接状况)
...全文
1141 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
heyuhang2004 2013-03-20
  • 打赏
  • 举报
回复
建一个按钮: var i : integer; begin for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin ServerSocket1.Socket.Connections[i].SendText('Hellow'); end; end;
haitao 2012-11-10
  • 打赏
  • 举报
回复
想服务器主动连接到客户端? 如果客户端位于防火墙后面,就不行了。。。。 即使是udp协议,也是需要服务器知道防火墙后的客户端的外部ip和端口号
lyhoo163 2012-11-10
  • 打赏
  • 举报
回复
Socket是COM模式,新的XE3的DateSnap好像是RESTful模式,支持回叫机制。
shuihan20e 2012-11-07
  • 打赏
  • 举报
回复
引用 8 楼 lch0422 的回复:
引用 7 楼 的回复: 你说一下你的具体需求,说不定我可以帮到你。 PC发送指令到 终端,终端接收到指令才会返回数据到PC(会自动返回数据),即PC不发送指令的话 终端不会返回数据。 我的想法是把 PC作为SERVER端,每个终端作为 CLIENT端。 PC,终端 的IP/PORT都已知。 看到的资料都是:TCP SOCKET通信 必须先是 CLIENT端 发起,然后SERVER端……
所谓服务器端,客户端都是相对的,你的这种想就变成了PC变成了客户端而已,有什么区别呢,只不过是CLIENT端来监听SERVER端而已,你可以考虑用UDP方式,广播
wylton 2012-10-25
  • 打赏
  • 举报
回复
同意10楼意见.

你想让pc机和终端机谁连接谁? 意思是你跟众多朋友通电话,谁先打给谁?你先打给他们,还是他们先打给你?
谁先谁是客户端.

一建立连接,不管谁是服务端,谁是客户端,都可以自由发送信息的.
kaikai_kk 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:
...

现在的情况是 把PC端当作 SERVER端,终端(CLIENT端) 不先发起 通信,即 在SERVER端没有获取到 SOCKET 信息 套接字 的情况下,SERVER端怎么发送消息到 CLIETN???
[/Quote]

Client一定要先与Server连接,既然有连接,就一定能获得socket;
你是想让Server去连接Client? 那岂不是搞反了,客户端变成服务嚣了
highbit 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:

你说一下你的具体需求,说不定我可以帮到你。

PC发送指令到 终端,终端接收到指令才会返回数据到PC(会自动返回数据),即PC不发送指令的话 终端不会返回数据。
我的想法是把 PC作为SERVER端,每个终端作为 CLIENT端。 PC,终端 的IP/PORT都已知。
看到的资料都是:TCP SOCKET通信 必须先是 CLIENT端 发起,然后SERVER端……
[/Quote]

你的需求有点类似聊天程序,其实PC端既是Server,也是Client,同样终端也是。
大致思路如下:
1.终端登录Server,Server保存Client的IP和Port等信息。
2.终端定时试连PC端,报告连接状态.
3.PC端定时检测终端连接状态.
4.PC端可以作为端主动发起与终端的通讯.
具体问题可以QQ讨论,我的QQ号:993515286
微积分g 2012-10-23
  • 打赏
  • 举报
回复
按你的思路,还是使用PC做客户端,终端做服务端算了,想在PC中全部显示所有终端的情况及统计,可以在一个程序中使用多个ClientSocket分别去连接每个终端嘛
kaikai_kk 2012-10-22
  • 打赏
  • 举报
回复
ServerSocket、ClientSocket是有连接的,即双方是一直保存持连接的
所以在客户端连接时(ServerSocket的onClientConnect事件),服务端用一个TList把客户端的Socket保存下来

服务端向客户端发消息时就用此Socket,Socket中已经有IP和PORT了
所以数据库中保存的IP地址以及PORT,其实是用不到的
shuihan20e 2012-10-22
  • 打赏
  • 举报
回复
你可以知道每个客户端的IP,但是端口这个不是确定的,除非你强制要求每个客户端必须用某个端口来连接服务器端

客户端不一定非要向服务器端发消息,但是必须要连接上服务器端才行
fang 2012-10-22
  • 打赏
  • 举报
回复
也就是你的PC做客户端用,主动向你的终端发起连接及请求,在你的PC端维护你所要管理的终端列表逐个发起连接及响应终端处理就可以了。
奔雷手 2012-10-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

你说一下你的具体需求,说不定我可以帮到你。
[/Quote]
PC发送指令到 终端,终端接收到指令才会返回数据到PC(会自动返回数据),即PC不发送指令的话 终端不会返回数据。
我的想法是把 PC作为SERVER端,每个终端作为 CLIENT端。 PC,终端 的IP/PORT都已知。
看到的资料都是:TCP SOCKET通信 必须先是 CLIENT端 发起,然后SERVER端接收到消息后保存SOCKET之后 才会给CLIENT端返回消息。
现在的情况是 把PC端当作 SERVER端,终端(CLIENT端) 不先发起 通信,即 在SERVER端没有获取到 SOCKET 信息 套接字 的情况下,SERVER端怎么发送消息到 CLIETN???
highbit 2012-10-22
  • 打赏
  • 举报
回复
你说一下你的具体需求,说不定我可以帮到你。
奔雷手 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

socket连接建立后服务器端即可发送数据,不需要客户端首先发送数据。
[/Quote]
没有理解我的意思。
我要表达的意思是 SERVER端 CLIENT端 都知道对应的IP,PORT,
但是CLIENT端不先发起通信,也就是说 我把 终端 当客户端,但是通信必须是由SERVER即PC端 发起的,终端只是由PC端发送指令之后才会返回数据。
Geoff08Zhang 2012-10-20
  • 打赏
  • 举报
回复
只要连接建立成功,服务器就可以发送数据.这有很多winsock源码,你可以参考:
http://download.csdn.net/detail/geoff08zhang/4571358
pathletboy 2012-10-20
  • 打赏
  • 举报
回复
socket连接建立后服务器端即可发送数据,不需要客户端首先发送数据。
内容概要:本文档聚焦于基于Peng-Robinson状态方程的化工热力学计算研究,系统介绍了利用Matlab代码实现纯组分及多组分系统的压缩因子(z因子)和逸度系数的计算方法,并进一步拓展至泡点压力与露点压力的数值求解。资源涵盖了从状态方程推导、非线性方程求根、相平衡条件判断到迭代算法实现的完整技术路线,提供了可运行的Matlab程序代码,有助于深入理解实际工程中物性参数的计算原理与实现过程; 适合人群:具备化工热力学基础知识和一定Matlab编程能力的高校学生、科研人员及工程技术人员,尤其适合从事过程系统模拟、油气田开发、精馏设计及相关领域研究的专业人士; 使用场景及目标:① 掌握Peng-Robinson方程在真实气体物性计算中的应用;② 实现多组分混合体系的相平衡计算与泡/露点预测;③ 为Aspen Plus等商用流程模拟软件提供底层算法验证与教学参考;④ 支持科研论文复现、课程设计、毕业设计及工业过程优化中的热力学数据支撑需求; 阅读建议:建议读者结合经典化工热力学教材同步学习,重点理解立方型状态方程的根判别、迭代收敛策略与相平衡准则的数学表达,动手调试并运行所提供的Matlab代码以掌握算法细节,还可将其扩展应用于其他状态方程(如SRK、vdW)的对比分析研究。
内容概要:本文围绕列车-轨道-桥梁交互仿真研究,基于Matlab平台构建数值模型,系统分析列车运行过程中轨道与桥梁结构间的动态相互作用机制。研究涵盖多体动力学建模、耦合系统运动方程求解、边界条件设定及仿真结果可视化等关键环节,重点揭示高速行车条件下基础设施的振动传递规律与力学响应特征。该仿真方法可有效评估结构安全性、舒适性指标及疲劳寿命,为轨道交通工程的设计优化与运维管理提供理论支撑和技术路径。文中配套提供了完整的Matlab代码实现方案及操作说明,便于用户复现、验证和拓展相关研究。; 适合人群:具备Matlab编程基础和结构动力学、车辆动力学等相关专业知识的研究生、科研人员及从事铁路工程、桥梁工程与交通系统安全评估的工程技术人才,尤其适合开展轨道交通耦合振动课题的研究者。; 使用场景及目标:①用于高校与科研机构进行列车-轨道-桥梁耦合系统动力学特性的教学演示与科学研究;②支撑高速铁路桥梁的设计优化、运营安全性评估与减振降噪方案验证;③为复杂交通基础设施的多物理场耦合仿真提供建模思路与代码参考。; 阅读建议:建议读者结合所提供的Matlab代码逐模块深入研读,重点关注系统建模假设、质量-刚度-阻尼矩阵构建方法及数值积分算法的实现细节,同时可通过调整参数进行敏感性分析,进一步掌握仿真模型的适用范围与优化方向。

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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