S
spary123
Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.serverConnect(AThread: TIdPeerThread);
begin
recordlist.Items.Add('来自主机'+AThread.Connection.Socket.Binding.PeerIP+
AThread.Connection.Socket.LocalName+'的请求已被接纳!');
end;
procedure TForm1.serverExecute(AThread: TIdPeerThread);
var
ipdatalength :integer;
begin
if not AThread.Terminated and AThread.Connection.Connected then
begin
if AThread.Connection.ReadCardinal = $ffffffff then
begin
ipdatalength:= AThread.Connection.ReadInteger(false);
AThread.Connection.ReadBuffer(recv,ipdatalength-8);
datadisplay; //显示数据
end;
end;
end;
procedure TForm1.serverDisconnect(AThread: TIdPeerThread);
begin
recordlist.Items.Add('连接已经断开!'); //recordlist为Tlistbox
end;
我用的INDYTCPServer(INDY9)
1在非调试环境下运行,服务器接收来自客户端的数据包并显示。服务器端程序运行
第一次客户端程序运行,服务器程序能够正常显示客户端的连接信息并显示数据。关闭客户端后触发Disconnect事件,显示“连接已经断开!”,没有报错(在调试环境下回报错socket error #10054)。第二次客户端程序运行,服务器程序能够正常显示客户端的连接信息“来自主机×××的请求已被接纳!”,客户端发送数据后,服务器程序不能显示数据。之后关闭服务器程序,会报一个错,APPlication ERROR EIdTerminateThreadTimeout in module Projeet1.exe.这是什么原因?
2客户端关闭后,服务器端程序应该关闭在当初客户端连接时服务器端程序为其建立的线程吧。客户端关闭触发Disconnect事件,这个事件有一个参数AThread,是那个当初客户端连接时服务器端程序为其建立的线程吗?如果是我用AThread.terminate;AThread.data=nil;应该可以关闭吧(好像也有点问题)。如果不是,怎么关闭那个线程呢?
感谢!!!
begin
recordlist.Items.Add('来自主机'+AThread.Connection.Socket.Binding.PeerIP+
AThread.Connection.Socket.LocalName+'的请求已被接纳!');
end;
procedure TForm1.serverExecute(AThread: TIdPeerThread);
var
ipdatalength :integer;
begin
if not AThread.Terminated and AThread.Connection.Connected then
begin
if AThread.Connection.ReadCardinal = $ffffffff then
begin
ipdatalength:= AThread.Connection.ReadInteger(false);
AThread.Connection.ReadBuffer(recv,ipdatalength-8);
datadisplay; //显示数据
end;
end;
end;
procedure TForm1.serverDisconnect(AThread: TIdPeerThread);
begin
recordlist.Items.Add('连接已经断开!'); //recordlist为Tlistbox
end;
我用的INDYTCPServer(INDY9)
1在非调试环境下运行,服务器接收来自客户端的数据包并显示。服务器端程序运行
第一次客户端程序运行,服务器程序能够正常显示客户端的连接信息并显示数据。关闭客户端后触发Disconnect事件,显示“连接已经断开!”,没有报错(在调试环境下回报错socket error #10054)。第二次客户端程序运行,服务器程序能够正常显示客户端的连接信息“来自主机×××的请求已被接纳!”,客户端发送数据后,服务器程序不能显示数据。之后关闭服务器程序,会报一个错,APPlication ERROR EIdTerminateThreadTimeout in module Projeet1.exe.这是什么原因?
2客户端关闭后,服务器端程序应该关闭在当初客户端连接时服务器端程序为其建立的线程吧。客户端关闭触发Disconnect事件,这个事件有一个参数AThread,是那个当初客户端连接时服务器端程序为其建立的线程吗?如果是我用AThread.terminate;AThread.data=nil;应该可以关闭吧(好像也有点问题)。如果不是,怎么关闭那个线程呢?
感谢!!!