我想通过TCP协议在iPad和一个嵌入式设备之间交换数据。我正在使用TCP frame work 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)
}如果您知道正确的流程,请帮助我。
谢谢
发布于 2017-05-02 18:17:56
在服务器端,您应该在新的套接字上进行读取,而不是在服务器套接字上。
http://cocoadocs.org/docsets/CocoaAsyncSocket/7.0.3/Protocols/GCDAsyncSocketDelegate.html#//api/name/socket:didAcceptNewSocket
这就是服务器端连接的工作方式。您可以创建一个监听端口的套接字。然后,您在该套接字上调用accept,它将阻塞等待连接。当建立连接时,accept调用创建一个新套接字作为连接的服务器端端点并返回。此时,使用新套接字调用委托方法。
您可能会发现,您还需要再次调用侦听套接字上的accept来接受更多连接。
https://stackoverflow.com/questions/43734073
复制相似问题