求助:idTCPServer的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 wallysw
  • 开始时间 开始时间
W

wallysw

Unregistered / Unconfirmed
GUEST, unregistred user!
有客户端A,B,C,服务端SS。
A,B,C的连接代码一样,如下:
idTCPClient.Host := '192.168.1.100';
idTCPClient.Port := 8989;
idTCPClient.Connect;
我并且用一个线程来读:
Memo1.Lines.Add(idTCPClient.Readln);

服务端SS的代码如下:
idTCPServer.DefaultPort := 8989;
idTCPServer.Active := True;

现在A,B,C三个连接SS,都连接成功,但是我在服务端SS里面写这样的代码:
ShowMessage(IntToStr(idTCPServer.Threads.LockList.Count));
结果为1。

我再在SS里面写这样的代码:
for i := 0 to idTCPServer.Threads.LockList.Count - 1 do
begin
TIdPeerThread(idTCPServer.Threads.LockList.Items).Connection.WriteLn('abc');
end;

结果只有A收到'abc'字符,其它的没有。

如果用B先连接,另外两个后连接,那么也只有B收到SS发来的'abc'字符,也就是谁先连接,谁就能收到,请问高手,这是怎么回事啊?帮帮小弟啊。
 
idTCPServer.DefaultPort := 8989;
改成
idTCPServer.Port := 8989;
 
Sorry,说错了,准确 的是
idTCPServer.DefaultPort := 8989;
这行去掉
改写
with IdTCPServer1.Bindings.Add do
begin
IP := '你监听的IP地址';
Port := 8989;
end;
IdTCPServer1.Active := True;
 
这位大哥,idTCPServer.DefaultPort := 8989;这行去掉的话,客户连接时,连接哪个端口呢?

with IdTCPServer1.Bindings.Add do
begin
IP := '你监听的IP地址';
Port := 8989;
end;
IdTCPServer1.Active := True;

我启动服务端之前,我是不知道A,B,C三个客户端的IP地址的,也许是192.168.1.2,也许是192.168.1.22,如果再多出个D客户端来,我不是又要改代码,写上D的地址上去?你说添加他们的IP地址和端口并绑定,这个好像行不通啊。
 
监听的IP地址是你服务器端的IP啊,和客户端无关嘛。如果你这台机器有多个IP,而你又希望绑定到所有的IP上,可以多加几个Binding对象,或者在Binding赋值的时候,IP赋值为'0.0.0.0'即可,如:
with IdTCPServer1.Bindings.Add do
begin
IP := '0.0.0.0;
Port := 8989;
end
 
一样的结果啊兄弟,哪个先连,哪个才收到消息,我在ShowMessage(IntToStr(idTCPServer.Threads.LockList.Count));结果还是为1。
 
你看看这个例子:http://www.2ccc.com/article.asp?articleid=3894
这是我在QQ群里面回答朋友问题的时候,写的Demo,之后上传到2ccc.com上了。我这个就可以直接给多个连接客户端发送文件,而且彼此都是在线程中执行文件传输的, 没有阻塞现象,也一切正常。估计这个demo对你会有帮助的。
 
谢谢你兄弟,能加你的QQ群吗?
 
1、2号群已经满了,3号4号群还有位置。至于群号码,兄弟可以查看我的个人资料。
 
谢谢你了[:)]
 

Similar threads

后退
顶部