【问题标题】:Tcp communication in swiftswift中的tcp通信
【发布时间】:2017-05-02 09:08:15
【问题描述】:

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

我可以通过将服务器 IP 地址提供给客户端来从客户端连接到服务器,并且在服务器上调用接受新连接的委托。

但我无法将任何数据从客户端写入服务器,我也需要这样做,反之亦然,才能从服务器到客户端进行读写。

已使用以下代码从客户端写入服务器。

//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)
}

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

谢谢

【问题讨论】:

  • 我对 CocoaAsyncSocket 一无所知,但是为什么你尝试从 serverSocket 而不是 newSocket 读取数据?

标签: swift sockets tcp cocoaasyncsocket


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-11-26
    • 2020-03-16
    • 1970-01-01
    • 2010-09-27
    • 2010-10-08
    • 2011-12-24
    • 2019-03-30
    • 2013-02-15
    • 2019-03-06
    相关资源
    最近更新 更多