如何通过iOS中的套接字从服务器接收数据?
发布时间:2020-12-14 19:09:32 所属栏目:百科 来源:网络整理
导读:我有一个应用程序,我必须使用套接字连接将数据发送到服务器并读取将由服务器发送的数据.我正在使用AsyncSocket类来写入和读取数据.我成功地在服务器上写入数据,服务器可以看到应用程序发送的数据.现在,问题是每当服务器向应用程序发送一些数据时,我如何使用A
|
我有一个应用程序,我必须使用套接字连接将数据发送到服务器并读取将由服务器发送的数据.我正在使用AsyncSocket类来写入和读取数据.我成功地在服务器上写入数据,服务器可以看到应用程序发送的数据.现在,问题是每当服务器向应用程序发送一些数据时,我如何使用AsyncSocket类接收这些数据.以下是我的代码.我把代理方法用于读取数据,但它从未调用过.
var socket = AsyncSocket()
socket = AsyncSocket(delegate: self)
self.socketConnect()
func socketConnect() {
do {
try socket?.connectToHost("IP Address",onPort: 6968)
} catch _ as NSError {
}
}
//MARK: - AsyncSocket Delegates method
func onSocket(sock: AsyncSocket!,didConnectToHost host: String!,port: UInt16) {
print("Connected to host : (host) with Port : (port)")
let alert:UIAlertController = UIAlertController(title: "Connected",message: "Host:(host) ** Port:(port)",preferredStyle:.Alert)
self.presentViewController(alert,animated: true,completion: nil)
let action:UIAlertAction = UIAlertAction(title: "Ok",style: .Default) { (UIAlertAction) -> Void in
print("Ok Pressed")
}
alert .addAction(action)
let dict = ["iUserId":"100","iRideId":"276","type":"client"] // For client side
var jsonString = NSString()
do {
let data = try NSJSONSerialization.dataWithJSONObject(dict,options: NSJSONWritingOptions.PrettyPrinted)
jsonString = NSString(data: data,encoding: NSUTF8StringEncoding)!
}catch let error as NSError {
print(error)
}
let reqData = jsonString.dataUsingEncoding(NSUTF8StringEncoding)
socket.writeData(reqData,withTimeout: 1.0,tag: 100)
}
func onSocket(sock: AsyncSocket!,didReadPartialDataOfLength partialLength: UInt,tag: Int) {
print("Read partial data")
}
func onSocket(sock: AsyncSocket!,didWriteDataWithTag tag: Int) {
print("Data write successfully")
}
func onSocket(sock: AsyncSocket!,didReadData data: NSData!,withTag tag: Int) {
print("Data read successfully")
}
func onSocket(sock: AsyncSocket!,willDisconnectWithError err: NSError!) {
print("Socket disconnect with error :(err.description)")
}
func onSocket(sock: AsyncSocket!,didAcceptNewSocket newSocket: AsyncSocket!) {
print("Accept new socket")
}
解决方法
我找到了自己的答案.我错过的是当socket连接到主机时我必须放入readdata线.所以写完之后会调用didReadData方法,并且该方法也必须编写我在didConnectToHost方法中编写的单行代码.
func socket(sock: GCDAsyncSocket!,port: UInt16) {
print("Connected to host : (host) with Port : (port)")
socket.readDataWithTimeout(-1,tag: 0)
}
func socket(sock: GCDAsyncSocket!,withTag tag: Int) {
print("Data read successfully")
socket.readDataWithTimeout(-1,tag: 0)
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
