求多个客户端一个服务器端的多线程解决方案 ( 积分: 100 )

  • 主题发起人 主题发起人 jhoper
  • 开始时间 开始时间
J

jhoper

Unregistered / Unconfirmed
GUEST, unregistred user!
现有多个(几十个)Gprs的客户端,数据传输量小,由服务器来向各个客户端发送命令,并能得到各个客户端返回的数据。打算用多线程来做,即来一个客户端连接,就开启一个线程,但我对delphi不熟,或者说对socket编程都没接触过,初步估计应该使用TServerClientThread,和TServerSocket,但我改怎么样去开启线程呢,客户端发来的数据,可各线程如何区分,感觉是不是不应该需要去区分,否则就没有开多线程的必要了,直接一个线程好了,这两个组件对此是不是有自己的解决方案,查了好多书和网上资料,有些说有但没讲怎么实现,谢谢了,
 
现有多个(几十个)Gprs的客户端,数据传输量小,由服务器来向各个客户端发送命令,并能得到各个客户端返回的数据。打算用多线程来做,即来一个客户端连接,就开启一个线程,但我对delphi不熟,或者说对socket编程都没接触过,初步估计应该使用TServerClientThread,和TServerSocket,但我改怎么样去开启线程呢,客户端发来的数据,可各线程如何区分,感觉是不是不应该需要去区分,否则就没有开多线程的必要了,直接一个线程好了,这两个组件对此是不是有自己的解决方案,查了好多书和网上资料,有些说有但没讲怎么实现,谢谢了,
 
用最新的INDY控件,其Server端的空间直接内嵌支持多线程,拿来用就行了
 
我写有TServerClientThread,和TServerSocket的多线程代码,跟你的需求差不多,也是一个服务器对应多个客户端。客户端主动请求发送数据,服务器发送数据给请求的客户端。需要的话可以Q我39913823
 
Socket的TCP的模型本来就是这样的啊,有一个监听线程监听访问请求,接受一个请求的时候它就建立一个新的线程。另外用TServerSocket 的话,要注意粘包的问题,建议使用其他的控件,例如上面的朋友说的Indy
 
TServerSocket监听到数据时会新建一个线程TServerClientThread,然后执行线程的ClientExecute方法
 
谢谢大家了,
to:tonyliu我加了你了,可你不在线
to:arhaha,kkkchenA能说详细点吗?我没用过Indy,手头也没这方面的资料,假如可能能给个简单的源码的示例吗?谢谢了,
给大家添麻烦不好意思
 
我的邮箱:jhoper@163.com,谢了
 
delphi6,7的DEMO中就有Indy的例子,不止一个哟
 
还不散分呀,看来帮错忙了
 
国庆回家了,不好意思,好几天都没上网了,再问个问题,我该怎么卸载delphi6里的indy8,然后安装indy9,本来可以再开个问题的,但无奈没什么分了,不好意思,答完就散分,大家放心好了,
 
用安装光盘来卸载!
 
多人接受答案了。
 
后退
顶部