假设我们创建了一个包含socket()
的套接字,然后我们使用了bind()
和listen()
。然后我们使用accept()
等待客户端请求,如果我们关闭服务器连接客户端(例如我们ctrl + c进程)。
recvfrom()
等待某人绑定回套接字?答案 0 :(得分:3)
我假设您正在使用TCP。
如果我们关闭服务器:
客户端是否仍然连接到端口?
没有。服务器端的操作系统将注意到服务器已终止,并将关闭连接,向客户端发送数据包以结束连接。即使没有发生这种情况(例如网络发生故障),连接也不再可用,并且第一次客户端发送内容时,它将意识到连接丢失。有些程序使用TCP Keep-Alive或发送心跳消息,以确保它们注意到服务器是否消失。
我们可以以某种方式重新建立与套接字的连接吗?
没有。客户需要建立新的连接。
这也是客户端问题吗?或者recvfrom()等待某人绑定回套接字?
legs.forEach({ (leg)
let legID = leg["Id"].stringValue
var searchInboundItinerariy: JSON = JSON.null
var searchOutboundItinerariy: JSON = JSON.null
for itinerariyValue in itinerariy {
let inboundID = itinerariyValue["InboundLegId"].stringValue
let outboundID = itinerariyValue["OutboundLegId"].stringValue
if inboundID == legID {
searchInboundItinerariy = itinerariyValue
}
if outboundID == legID {
searchOutboundItinerariy = itinerariyValue
}
let inboundPrice = searchInboundItinerariy["PricingOptions"][0]["Price"].doubleValue
let finalInbound = InboundID(price: inboundPrice, deepLinkURL: inboundDeeplink, carrier: inboundCarrierName, carrierImage: inboundCarrierImage, inboundCode: inboundAirportCode, stringPrice: sPrice)
不会以这种方式等待。服务器无法重新连接"或者"重新绑定"就像你暗示的那样。客户端需要通过明确重新连接来响应断开连接。
答案 1 :(得分:2)
客户端是否仍然连接到端口?
客户端在Windows上读取时会重置连接,或者在* nix下读取时会重置EOS,或者在写入时重置连接。
我们可以以某种方式重新建立与套接字的连接吗?
到端口。客户端可以尝试重新连接,但在服务器运行和监听之前它不会成功。重启后,服务器无法对其进行任何操作。
这也是客户端问题吗?
是的,见上文。
或
recvfrom()
等待某人绑定回套接字?
当然不是。
注意:您应该将recv()
用于流套接字。您不需要提供源地址信息recvfrom()
,如果确实如此,因为它已经通过套接字上的getpeername()
提供了。