【问题标题】:Closing a connection and re-opening with Synapse in Lazarus在 Lazarus 中关闭连接并使用 Synapse 重新打开
【发布时间】:2014-11-30 20:37:50
【问题描述】:

我正在使用带有 Lazarus 的 Synapse 库,并尝试在两个不同的 IP 地址之间切换 TCPBlockSocket 连接。

我创建了 Socket 连接:

mySocket:=TTCPBlockSocket.Create

然后我连接到第一个 IP 地址:

mySocket.Connect(firstIPaddress,portNumber);

这很好用,但如果我尝试切换到第二个 IP 地址

mySocket.Connect(secondIPaddress,portNumber);

我使用mySocket.SendString() 发送的任何数据仍会发送到firstIPaddress

我已经尝试 .Destroying mySocket 并重新创建它,但我遇到了崩溃(我检查是否分配了 mySocket 以及是否在重新创建 TCPBlockSocket 对象之前执行 .Destory - 但这似乎是反正有点严重。

是否有正确的方法来断开现有的TCPBlockSocket,然后将其重新连接到不同的 IP 地址?

有没有一种简单的方法来测试TCPBLockSocket 是否有一个活跃的工作连接?

【问题讨论】:

  • 我已经看过stackoverflow.com/questions/13045943/… 上面的第二个问题,但(mySocket.Socket = INVALID_SOCKET) or ((mySocket.WaitingData = 0) and mySocket.CanRead(0)) 总是返回false,即使我有一个良好的连接......
  • 经过进一步调查,似乎是 .CanRead(0) 每次都返回 false 并导致调用返回 false - 即使连接良好。

标签: sockets tcp lazarus fpc


【解决方案1】:

当你找到它时很明显......

您需要先调用mySocket.CloseSocket(),然后再使用新的IP 地址和端口调用.Connect

(根据我对 OP 的评论,检查打开的连接是否仍处于打开状态和工作状态仍然存在问题)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多