indy和socket的一些区别

来源:互联网 发布:外国人在淘宝买东西吗 编辑:程序博客网 时间:2024/06/06 01:26
1.
下面比较一下serverSokcet与clientSocket和idTcpServer与idTcpClient两组通讯组件的异同:

socket即支持同部传送数据又支持异步传送数据。而idtcp则只支持同步传送数据。

serverSokcet与clientSocket是非阻塞式的,基于事件触发的。  


idTcpServer与idTcpClient是阻塞式的,基于多线程的。

idTcpServer为每个连接的用户建立一个单独的线程,编程比较方便。

用indy作完成端口,经过压力测试,发现可以承受600个并发用户,当然这个与个人编程水平有关,做不好,100以上并发用户都难接受

2.
问:一个网络系统,在客户端相互信息发送时,同时要求记录保存到服务器的数据库里,请教服务器端/客户端分别用INDY的具体哪个控件比较合理?

答:IDTCPClient/IDTCPServer/IDUDPClient/IDUDPServer均可。主要看具体应用要求

IDTCPClient/IDTCPServer会在运行时建立一个长时连接,直到退出;IDUDPClient/IDUDPServer则只管往指定的IP和端口发数据,能否收到由网络来决定。它们消耗的资源也是有所区别。

3.
tcpclient tcpserver和 idtcpclient idtcpserver不是同一个控件,再D7中,
他们分属在不同的模板(intenet,indy client,indy server),也有着不同的属性、方法和事件。
另外,intenet的tcpserver在接收数据是自动建立线程触发onAccept事件,因此必须要在此事件建立一个线程,可参考demo中的netchat例子。

1.阻塞模式编程建议用INDY的IDTCPCLIENT IDTCPSERVER
2.非阻塞模式建议用D6中的CLIENTSOCKET SERVERSOCKET,D7中可以通过 COMPONENT->
INSTALL PACKAGES->add->DELPH7\BIN\DCLSOCKETS70.BPL来添加。
3.TCPCLIENT,TCPSERVER在D7中的DEMOS是用的阻塞模式,当客户端连接后建立了线程来处理和客户端的通讯问题。BLOCKMODE:=BMTHREADBLOCKING;
4.TCPCLIENT,TCPSERVER也可以工作在非阻塞模式,BLOCKMODE:=BMNOBLOCKING;这样就象CLIENTSOCKET SERVERSOCKET了,但是TCPCLIENT 可以象CLIENTSOCKET一样又ONREAD,ONWRITE,而TCPSERVER确没有看到象SERVERSOCKET那样的ONCLIENTREAD,ONCLIENTREAD.
5.查看TCPSERVER的源代码,发现他和TCPCLIENT一样最终是继承于TBaseSocket的,那么应该也可以有ONREAD,ONWRITE。
6.如果我们象TCPCLIENT那样作个procedure TcpServerReceive(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer),你面写处理代码,然后TCPSERVER1.OnReceive:=TcpServerReceive; OnSend也如此类推,应该就可以了。

7.这个方法没有测试,但原理是这样的,只不过TCPSERVER的OnReceive,OnSend在设计时看不到而已,不等于他没有。


0 0
原创粉丝点击