看了你的问题,不是很明白。 你的思路是说所有客户端的连接是先由b接管,然后b和a 动作,最后将结果返回给客户端。 1.当众客户端同时对我进行通信时我如何区分,在这里要不要多线程,如何实现? ----------- b将会是一个serversocket,(A做成server或client是无所谓的),当任何一个客户端连接b时OnGetThread: TGetThreadEvent事件发生,事件参数 Sender: TObject; ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);其中 TServerClientThread是一个var参数,它代表为当前连接所开辟的线程。 你可以在这里创建自己的线程实例。对于区分不同客户端,我建议你不用使用socket的机制,而是与你自己的业务系统相关(也是必然的吧),比如你在传输的数据包中加一个用户id。 ------- 2.众客户端的数据存取请求由B机转发给A服务器处理的过程要不要用多线程,如何实现?如何把A服务器的结果正确地返回给众客户端? ------ “由B机转发给A服务器处理的过程要不要用多线程”--我觉得是一定要用的。不过既然你要通过b来做中间层。又打开了与连接b同样多的线程去连接A,好像有点不好。对于你说的“而我必须考虑安全,...”我觉得应该有别的办法解决。 最后“如何把A服务器的结果正确地返回给众客户端”这个问题就只有你自己能回答了。置于你怎么组织数据,客户端怎么解析。还是更具体数据结合考虑。但相同的是,tcp是可靠连接,只能出现连接失败、成功、超时。不会丢数据。 对了,serversocket要设置成阻塞模式。呵呵 下面是有关delphi的文档,虽然borland的文档比较烂,但倒也不是一无是处。 ------------- TCustomServerSocket.::OnGetThread Occurs when the server socket needs to create a new execution thread for a connection to a client socket. -------------------- Writing client threads To write a thread for client connections, define a new thread object using the New Thread Object dialog. The Execute method of your new thread object handles the details of reading and writing over the thread connection. It creates a TWinSocketStream object, and uses that to read or write. For example:... ------ 还有一些你就自己查吧。 ------
它用不用多线程随使你,不过建议你用.对于B机来说,你的那些客户端是怎么同B机上程序通讯的??
Socket? COM? WINDOWS消息? 消息队列?Web Services?
数据库存贮转发?
到底是哪一种?
写的是一个聊天程序,用的就是client/server.
客户端所有发送的消息都通过server转发.
同时服务端保持同所有客户的连接.
为了判定是应该向哪个客户socket发送消息,
信息中必须包含有目的端socket的ip和port,
然后在serversocket的connection中查找.方法比较笨,但只是为了学习.真正的写这种聊天程序,应该用udp,而不是用tcp.
每当B机中接受到一个连接后,你应当创建一个ClientSocket,并用它连接到A机。
我这里有一个简单的例子,如果要的话,告诉我Mail
http://www.csdn.net/expert/topic/800/800628.xml?temp=.1855432
我想可以通过服务端转发的方法。
你的思路是说所有客户端的连接是先由b接管,然后b和a
动作,最后将结果返回给客户端。
1.当众客户端同时对我进行通信时我如何区分,在这里要不要多线程,如何实现?
-----------
b将会是一个serversocket,(A做成server或client是无所谓的),当任何一个客户端连接b时OnGetThread: TGetThreadEvent事件发生,事件参数
Sender: TObject; ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);其中
TServerClientThread是一个var参数,它代表为当前连接所开辟的线程。
你可以在这里创建自己的线程实例。对于区分不同客户端,我建议你不用使用socket的机制,而是与你自己的业务系统相关(也是必然的吧),比如你在传输的数据包中加一个用户id。
-------
2.众客户端的数据存取请求由B机转发给A服务器处理的过程要不要用多线程,如何实现?如何把A服务器的结果正确地返回给众客户端?
------
“由B机转发给A服务器处理的过程要不要用多线程”--我觉得是一定要用的。不过既然你要通过b来做中间层。又打开了与连接b同样多的线程去连接A,好像有点不好。对于你说的“而我必须考虑安全,...”我觉得应该有别的办法解决。
最后“如何把A服务器的结果正确地返回给众客户端”这个问题就只有你自己能回答了。置于你怎么组织数据,客户端怎么解析。还是更具体数据结合考虑。但相同的是,tcp是可靠连接,只能出现连接失败、成功、超时。不会丢数据。
对了,serversocket要设置成阻塞模式。呵呵
下面是有关delphi的文档,虽然borland的文档比较烂,但倒也不是一无是处。
-------------
TCustomServerSocket.::OnGetThread
Occurs when the server socket needs to create a new execution thread for a connection to a client socket.
--------------------
Writing client threads
To write a thread for client connections, define a new thread object using the New Thread Object dialog. The Execute method of your new thread object handles the details of reading and writing over the thread connection. It creates a TWinSocketStream object, and uses that to read or write. For example:...
------
还有一些你就自己查吧。 ------