首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cocoaasyncsocket问题,GCDAsyncSocket连接问题

Cocoaasyncsocket问题,GCDAsyncSocket连接问题
EN

Stack Overflow用户
提问于 2020-01-20 20:32:34
回答 2查看 439关注 0票数 1

为什么在服务器没有响应"try“的情况下尝试连接时会显示已连接?

我需要检查连接状态。每次,不管超时设置如何,它都会显示它已连接...

我的代码:

代码语言:javascript
复制
        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")

        }

还有一个问题,

我在同一个端口上创建了两个套接字:

代码语言:javascript
复制
socket1.connect(toHost: "192.168.1.1", onPort: 5000, withTimeout: 5)
socket2.connect(toHost: "192.168.1.1", onPort: 5000, withTimeout: 5)

在func中:

代码语言:javascript
复制
func socketDidDisconnect(_ sock: GCDAsyncSocket, withError err: Error?) {
 ...
}

如何检测哪个插座(socket1或socket2 )已断开连接?

EN

回答 2

Stack Overflow用户

发布于 2020-01-20 20:39:11

GCDAsyncSocket确实有委托方法(在上面的代码示例中,您确实将委托设置为self)。因此,使用此函数的Swift等效项实现一个微型函数:

- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port

类似于:

代码语言:javascript
复制
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!")“移到那里去了。如果连接了插座,您将在控制台中看到打印。

票数 0
EN

Stack Overflow用户

发布于 2020-01-21 02:39:44

我会为每个套接字上的"tag“属性赋值,然后在委托上比较socket.tag参数,以确定哪个套接字断开了连接。

代码语言:javascript
复制
socket1.tag = 1
socket2.tag = 2


func socket(socket : GCDAsyncSocket, didConnectToHost host:String, port p:UInt16)
{
    if (socket.tag==1) {
       print("Socket 1 disconnected")
    } 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59823374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档