Client sent message every time when I press send button but Server receive message only first time. What is the issue in server
Server:
You have to make a read call from your server class in didReadData: delegate. Rest is fine. Use below code.
-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
[sock readDataWithTimeout:-1 tag:0];
NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"MSG: %@",msg);
}
so after struggling with this for a bit, I came up with the following pattern for digesting data. Though the below is an over simplification, it is easily ported to different tasks:
Somewhat Swift Solution
var dataCache = Data()
func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) {
sock.readData(withTimeout: -1, tag: 0)
}
func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
dataCache.append(data)
sock.readData(withTimeout: -1, tag: 0)
}
func socketDidDisconnect(_ sock: GCDAsyncSocket, withError err: Error?) {
print("Closed with error: \(err)")
processData()
}
func socketDidCloseReadStream(_ sock: GCDAsyncSocket) {
print("Closed successfully")
processData()
}
func processData() {
// Do something with dataCache eg print it out:
print("The following read payload:\(String(data:dataCache, encoding: .utf8) ?? "Read data invalid")")
dataCache = Data()
}