首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swift中的Tcp通信

swift中的Tcp通信
EN

Stack Overflow用户
提问于 2017-05-02 17:08:15
回答 1查看 2K关注 0票数 1

我想通过TCP协议在iPad和一个嵌入式设备之间交换数据。我正在使用TCP frame work CocoaAsyncSocket。使用它,我创建了一个客户端和服务器,它们实际上是两个不同的ipads。

通过将服务器的ip地址提供给客户端,我能够从客户端连接到服务器,并在服务器上调用用于接受新连接的代理。

但我不能写任何数据从客户端到服务器,我也需要这样做,反之亦然,能够从服务器写入和读取到客户端。

我使用了下面的代码来从客户端写到服务器端。

代码语言:javascript
复制
//Client side
//For making a connection with server, this is succesfull
func establishSocket() {

    do {

    try socket!.connect(toHost: "192.168.xx.xxx", onPort: 5007)
    }
    catch {
        print("Could not connect to host")
    }

}
//this is to write data to the server. 
func writeString(message:String) {
    let data = message.data(using: .utf8)
    socket?.write(data!, withTimeout: -1, tag: 1)
}


//Server side
//This is called succesfully
func socket(_ sock: GCDAsyncSocket, didAcceptNewSocket newSocket: 
GCDAsyncSocket) {
    print("Did accept on socket")
    setSocketRead()
}

func setSocketRead() {
serverSocket?.readData(to: reaaddata, withTimeout: -1, tag: 1)
}

//This is not getting called
func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: 
Int) {
    let datastring = data.base64EncodedString()
    print(datastring)
}

如果您知道正确的流程,请帮助我。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-05-02 18:17:56

在服务器端,您应该在新的套接字上进行读取,而不是在服务器套接字上。

http://cocoadocs.org/docsets/CocoaAsyncSocket/7.0.3/Protocols/GCDAsyncSocketDelegate.html#//api/name/socket:didAcceptNewSocket

这就是服务器端连接的工作方式。您可以创建一个监听端口的套接字。然后,您在该套接字上调用accept,它将阻塞等待连接。当建立连接时,accept调用创建一个新套接字作为连接的服务器端端点并返回。此时,使用新套接字调用委托方法。

您可能会发现,您还需要再次调用侦听套接字上的accept来接受更多连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43734073

复制
相关文章

相似问题

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