AsyncSocket было действительно сложно настроить для меня

аюсь сделать следующее с измененной версией примера echo-сервера, который поставляется с библиотекой cocoaasyncsocket:

1) открыть соединение со скриптом Python, выступающим в роли сервера
2) отправка данных // работает, но делегат не запускается
3) получить данные обратно // делегат не запускается
4) отключить // не отключить, видимо, все еще в моей теме

В настоящее время я открываю соединение в делегате didFinishLaunchingWithOptions, а затем пытаюсь отправить данные в делегат didConnectToHost. Затем я пытаюсь прочитать данные, возвращающиеся с клиента, а затем отключиться.

Я могу открыть соединение и отправить данные (которые сервер проверяет как полученные), но делегат didWriteDataWithTag никогда не срабатывает. Однако сервер получает данные. Затем сервер запускает некоторые данные, но didReadData также не запускается.

Помимо того, что делегаты на чтение / запись не запускаются, похоже, я неправильно организовываю свой код, но я не уверен, как это выглядит в системе, управляемой событиями, в отличие от цикла выполнения (I ' я новичок в вещах, управляемых событиями + сети). Если у меня есть ряд действий, соответствующие завершения которых инициированы их делегатами, должны ли делегаты делиться какими-то сообщениями - то есть мы получили сообщение "xxx", напишите "yyy"? Я бы предпочел иметь одну функцию, которая управляет всем этим. Есть ли канонический способ сделать это?

IPhoneConnectTestAppDelegate.m (фрагменты)

- (void)localConnect {
    NSError *error = nil;
    if (![asyncSocket connectToHost:@"localhost" onPort:5000 error:&error]) {
        DDLogError(@"Error connecting: %@", error);
    }
}

- (void)disconnect {
    [asyncSocket setDelegate:nil];
    [asyncSocket disconnect];
    [asyncSocket release];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Setup our socket (GCDAsyncSocket).
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:mainQueue];

    [self localConnect];

    // Add the view controller's view to the window and display.
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
}


- (void)onSocket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
    NSString *output = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    NSLog(@"didReadData: %@", output);

}

- (void)onSocket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag {
    NSLog(@"didWriteDataWithTag");
}

- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port {
    NSLog(@"socket:%p didConnectToHost:%@ port:%hu", sock, host, port);
    if(port == 5000)
    {
        NSString *msg = @"q";
        NSData *dataOut = [msg dataUsingEncoding:NSASCIIStringEncoding];
        [asyncSocket writeData:dataOut withTimeout:-1 tag:0];
        [asyncSocket readDataWithTimeout:-1 tag:0];
        [self disconnect];
    }
}

tcpserver.py

# TCP server example
import socket, time
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("", 5000))
server_socket.listen(5)

print "TCPServer Waiting for client on port 5000"

while 1:
    client_socket, address = server_socket.accept()
    print "I got a connection from ", address
    while 1:
        data = client_socket.recv(512)
        print "Data from client",data

        time.sleep(2)
        data = "xxx"
        print "Sending data to client",data
        client_socket.send (data)
        break;

Ответы на вопрос(3)

Ваш ответ на вопрос