为什么在服务器没有响应"try“的情况下尝试连接时会显示已连接?
我需要检查连接状态。每次,不管超时设置如何,它都会显示它已连接...
我的代码:
socket = GCDAsyncSocket(delegate: self, delegateQueue: DispatchQueue.main)
do {
try socket?.connect(toHost: "192.168.1.1", onPort: 5000, withTimeout: 5)
print ("connect")
}catch {
print("socket error")
}还有一个问题,
我在同一个端口上创建了两个套接字:
socket1.connect(toHost: "192.168.1.1", onPort: 5000, withTimeout: 5)
socket2.connect(toHost: "192.168.1.1", onPort: 5000, withTimeout: 5)在func中:
func socketDidDisconnect(_ sock: GCDAsyncSocket, withError err: Error?) {
...
}如何检测哪个插座(socket1或socket2 )已断开连接?
发布于 2020-01-20 20:39:11
GCDAsyncSocket确实有委托方法(在上面的代码示例中,您确实将委托设置为self)。因此,使用此函数的Swift等效项实现一个微型函数:
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
类似于:
socket = GCDAsyncSocket(delegate: self, delegateQueue: DispatchQueue.main)
do {
// I don't think socket should be optional here...
try socket.connect(toHost: "192.168.1.1", onPort: 5000, withTimeout: 5)
} catch {
print("socket error")
}
func socket(socket : GCDAsyncSocket, didConnectToHost host:String, port p:UInt16)
{
print("connected to \(host) & \(port)")
}你把你的"print("connected!")“移到那里去了。如果连接了插座,您将在控制台中看到打印。
发布于 2020-01-21 02:39:44
我会为每个套接字上的"tag“属性赋值,然后在委托上比较socket.tag参数,以确定哪个套接字断开了连接。
socket1.tag = 1
socket2.tag = 2
func socket(socket : GCDAsyncSocket, didConnectToHost host:String, port p:UInt16)
{
if (socket.tag==1) {
print("Socket 1 disconnected")
}
}https://stackoverflow.com/questions/59823374
复制相似问题