您好!帮忙看看代码:如何用TServerSocket控件服务器端向TClientSocket控件客户端发送字符串呢?很急!谢谢!(300分)

  • 主题发起人 主题发起人 山东好汉
  • 开始时间 开始时间

山东好汉

Unregistered / Unconfirmed
GUEST, unregistred user!
TClientSocket客户端的程序已经与TServerSocket服务器端程序建立好了连接;现在服务器端TServerSocket要主动向TClientSocket客户端发送一个字符串,代码如下:

begin
Serversocket1.Socket.Connections[0].Sendtext('你好!');
end;
有时候,客户端TClientSocket能收到!有时候却出现下面的错误:
List index out of bounds(0)!
后来改成下面的代码:
Serversocket1:Tserversocket;
var
i:integer;
count:integer;
begin
count:=Serversocket1.socket.activeconnections; //发现有时候count等于0,所以造成不能发送给客户端数据
for i:=1 to count-1 do
Serversocket1.socket.connections.sendtext(‘您好’);
end;
原因是:发现有时候count等于0,所以造成不能发送给客户端数据,但是这时候客户端和服务器端还处于连接状态,请问如何才能发送给客户端字符串呢?
请您帮忙,谢谢!
 
var
i:integer;
count:integer;
begin
count:=Serversocket1.socket.activeconnections;
for i:=0 to count-1 do //下标从0开始
if ServerSocket1.Socket.Connections.Connected then
Serversocket1.socket.connections.sendtext(‘您好’);
end;
 
谢谢smokingroom,有时候还是不能发送成功[:(]
 
再试试下面的代码。
var
I:integer;
begin
with ServerSocket1.Socket do
begin
Lock;
try
for I:=0 to ActiveConnections-1 do
Connections.SendText('您好');
finally
Unlock;
end;
end;
end;
 
没有活的客户端Socket连接,服务端是没法给客户端发的,你是怎么确定客户端是连上服务器端的?我觉得你可能对TserverSocket和TClientSocket的使用有问题。
 
"....但是这时候客户端和服务器端还处于连接状态...",你是怎么确定是连接状态的?
 
To sail_z:
"....但是这时候客户端和服务器端还处于连接状态...",你是怎么确定是连接状态的?
:我只知道现在TClientSocket.Active已经设置成了True,应该已经连接了.....
为什么服务器端向客户端发送字符串的时候,会没有ActiveConnections?如何才能激活一个ActiveConnections连接呢?
 
即使你的TClientSocket.Active设成true,但那不能保证你的客户端一直与你的服务程序能一直保持连接,我想知道你到底想实现什么功能,有几个客户端?客户端怎么发起与服务端连接?服务端都做了那些工作?如果想保证客户一直与服务端保持可靠连接状态,得必须建立一个连接机制。还有你应该通过你的服务端保存的客户端连接列表来确定每个客户端的连接,不要用ActiveConnections。。。QQ:463418145 详聊可加我

我觉得,你所碰到的情况是正常现象。
 
在客户端连接到Server 端时,会触发两个事件(如果是stThreadBlocking 模式,也就是线程阻断模式最后还会触发 OnThreadStart 事件),只要在这几个事件中把客户的 Socket 信息记录到一个变量中,然后就可以用这个变量来查询客户端的状态或对客户端发送信息了。
例如:
procedure TnetCom.Socket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
var inf1:^TCustomWinSocket;
begin
inf1.cnHandel:=Socket.Handle; //这句的语法应是错的,我只是说明这个方法,具体实现请自己测试
 
发送数据之前,一定要检查连接是否还存在,如果存在则发送数据,不存在就不要发送数据,不然会出错的
 
多人接受答案了。
 
后退
顶部