為什麼我的TCP套接字顯示連接但沒有回應?

问题描述 投票:0回答:1

我有一個使用雙向TCP套接字的程序,從主機PC發送消息到VLinx乙太網到串聯轉換器,然後通過RS-232到PLC。 在大流量期间,该套接字将间歇性地停止通信,尽管连接的所有软测试显示它是连接的,活动的和可写的。 我怀疑是有什么东西中断了连接,导致插座在没有FINACK的情况下关闭。 我怎样才能测试出这种中断可能发生在哪里?

程序本身是用VB6编写的,使用的是Catalyst SocketToolsSocketWrench,而不是标准的Winsock库。 方法、属性和代码似乎都是正确的,因为同样的设置在其他两个站点都能可靠地工作。 只是这个网站特别出现了这个问题。 只有在生产过程中,当网络上有流量时,才会发生这种情况,而且每天10小时可以失去连接20-100次。

我们有冗余的测试来捕捉这种失去通信的情况,并保持系统的运行。 我们对ACK消息、消息队列大小、传输之间的时间(令牌间隔2s)等都有测试。 通常情况下,套接字不会超过30秒无响应,然后才会被抓到,关闭并重新建立,这在99%的时间内都能正常工作>。

之前我启用了SocketTools的日志功能,没有捕捉到任何相关信息。 最近,我試圖有系統ping VLinx上的第一個信號的遺漏消息(2.5秒)。 這些ping一直是成功的,這意味著如果在交換機或AP有一個瞬間的連接損失,它不會保持斷線很長時間。

除了我们自己的PC和VLinx之外,我无法接触到网络硬件。 该设施的IT也不倾向于帮助跟踪这类事情,因为他们的工作是基于项目的模式。

是否有人有任何建議,我可以做什麼,嘗試並確定問題發生在哪裡,以便我可以嘗試拿出一個永久的解決方案,這個問題,而不是每天多次重新連接的創傷貼?

sockets tcp vb6
1个回答
0
投票

像Wireshark這樣的工具可能在看到網絡層面上發生的事情時很有幫助。SocketToolsSocketWrench中的日志记录工具只能报告API级别的情况,听起来不管是什么问题都发生在TCP堆栈的较低级别。

如果这种情况发生在相对不活跃的时期之后,然后是一阵活动之后,您可以尝试启用keep-alive,看看是否有任何不同。

© www.soinside.com 2019 - 2024. All rights reserved.