我想通过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)
}
如果您知道正确的流量,请帮助我。
由于
答案 0 :(得分:0)
在服务器端,您应该在新套接字上进行读取,而不是服务器套接字。
这是服务器端连接的工作方式。您创建一个侦听端口的套接字。然后在该套接字上调用accept
并阻止等待连接。建立连接后,accept
调用会创建一个新套接字,作为连接的服务器端端点并返回。使用新套接字在那时调用您的委托方法。
您可能会发现还需要再次在侦听套接字上调用accept
以接受更多连接。