我在我的应用程序中使用TIdTCPServer。这里的硬件充当tcp客户端。客户端使用SYN命令建立连接(在作为工具的线鲨中观察)。我的应用程序有多个客户,所以每个客户都连接到我的服务器对于第一次连接,数据发送&接收是好的。但是当硬件关机&发生时,我的服务器无法将数据发送到硬件,直到应用程序重新启动。以下是关于本的意见:TIdTCPServer无法在客户端重新连接后发送数据
1.当第一次客户机具有SEQ无连接SYN = 0接收的,SYN ACK具有SEQ否= 1名发送到客户端从服务器
2.Data发送&接收是工作正常
3.Hardware断电通过使用“netstat的”我观察到存在用于断开的IP &端口号建立的连接发生
4.In命令提示。
5.I发送一些数据(在电线鲨它显示6次重传)
6.After这在“命令提示”对应连接建立的数据没有出现
7.I将数据发送到客户端现在由IdTCPServer引发的“连接关闭”异常(在此异常之后,除了我通过使用connection.disconnect关闭连接,代码&从IdTCPServer的Locklist中删除了该特定客户端)
8.Hardware powered &发送SYN与Se Q无= 0
9.In丝鲨SYN ACK具有SEQ没有像45678452发送到硬件
10.After,在命令提示连接建立观察
11.I试图将数据发送到客户端,但“锁定列表”没有与客户端IP &端口再次更新,所以数据没有发送到客户端(我的代码就好像IP没有出现在“Locklist”中,然后不发送数据)。 有没有解决方法?
以下是我的代码:
try
for Count := 0 to frmtcpserver.IdTCPServer1.Contexts.LockList.Count - 1
do
begin
if TIdContext(frmtcpserver.IdTCPServer1.Contexts.LockList.Items[Count]).Binding.PeerIP = Destination_IP then
begin
DestinationIPIdx := Count;
end;
end;
frmtcpserver.IdTCPServer1.Contexts.UnlockList;
if DestinationIPIdx > -1 then
begin
// sending data here
TIdContext(frmtcpserver.IdTCPServer1.Contexts.LockList.Items[DestinationIPIdx])
.Connection.IOHandler.Write(TempBuf, NoofBytesToSend,0);
end;
end;
on E: EidException do
begin
TIdContext(frmtcpserver.IdTCPServer1.Contexts.LockList.Items[DestinationIPIdx]).Connection.Disconnect;
frmtcpserver.IdTCPServer1.Contexts.LockList.Delete(DestinationIPIdx);
end;
你都清楚地在服务器端错误地管理客户端(!例如,不要手动删除服务器内部列表条目,不吞例外),但因为你没有显示任何你的实际代码,所以没有人能告诉你你做错了什么或者如何解决它。请显示您的实际代码。 –
即使我不从列表中删除TIdTCPServer也无法在重新连接后发送数据。 –