关于daemon和app 用CocoaAsyncSocket进行通信的问题


#1

用的是这个CocoaAsyncSocket, 我把daemon作为服务器,App作为Client, 但是我的App每次跟服务器进行socket连接的时候, 一连上马上就断了, 客户端就报错如下:

TCP Conn 0x170191030 canceled

Error Domain=GCDAsyncSocketErrorDomain Code=7 “Socket closed by remote peer” UserInfo={NSLocalizedDescription=Socket closed by remote peer}

请问各位大佬,这是什么问题, 该如何解决呢

补充一下: 
我把两个App, 一个作为服务器,一个作为Client, 就不会报上面的错误 。

#2

就是daemon主动断开了连接。


#3

为什么daemon主动断开连接呢


#4

把你的代码贴一下,我帮你看看


#5

app端:

  • (IBAction)connect:(id)sender {
    NSLog(@“connect”);
    //1.1创建客户端的socket对象
    GCDAsyncSocket *clientSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(0, 0)];
    self.clientSocket = clientSocket;

    //1.2发送连接请求 ip地址 也可以写成域名 www.xxx.com
    NSError *error = nil;
    [clientSocket connectToHost:@“127.0.0.1” onPort:5288 error:&error]; //
    if (!error) {
    NSLog(@“error = %@”,error);
    }

}

daemon端:

  • (IBAction)startServer:(id)sender {
    NSLog(@“startServer”);
    //开启xxx服务:5288
    //1.创建一个socket对象
    //serverSocket 服务端的socket只监听 有没有客户端连接
    GCDAsyncSocket *serverSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(0, 0)];

    //2.绑定端口,并开启监听,代表xxx服务已经开启
    NSError *error = nil;
    [serverSocket acceptOnPort:5288 error:&error];
    if (!error) {
    NSLog(@“xxx服务开启成功”);
    }else{
    //失败的原因是端口被其他程序占用了
    NSLog(@“xxx服务开启失败 %@”,error);
    }
    self.serverSocket = serverSocket;

}