Tcp在swift中进行通信

时间:2017-05-02 09:08:15

标签: swift sockets tcp cocoaasyncsocket

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

我能够通过将服务器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)
}

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

由于

1 个答案:

答案 0 :(得分:0)

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

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

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

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