AsycnSocket не се свързва към TCP сериен порт през wifi

Имам приложение за iPhone, което стартирам на симулатора. XCode версия 3.2.6/4.3. Опитвам се да комуникирам с радио на сериен порт на компютър през wifi, и двете на един и същ сървър... Опитах NSStream и GCDAsyncSocket (само за да се уверя). Радиото има собствен IP адрес и номер на порт. Всъщност това е TCP/IP wifi модул. След като промених отдалечения достъп на компютъра, за да приеме моя IP адрес, най-накрая успях да се свържа, но веднага ме изритаха, предполагам, че е, когато се опитвам да чета или пиша. Същото се случва, когато използвате Telnet, свързва се и след това прекъсва. Радиото издава HELLO, когато някой се свърже, така че Telnet трябва да се опита да прочете, тъй като данните се изпращат. предполагам. Мислех, че след като мога да се свържа, трябва да мога да чета/пиша. (Да, начинаещ тук)

Ще се радвам на всякакви мисли или насоки. Проучвам повече от седмица и полудях.

Благодаря. Добавих кода по-долу, както и съобщението за грешка.

Това е съобщението за грешка: socketDidDisconnect:withError: "Error Domain=NSOSStatusErrorDomain Code=-9844 "Операцията не може да бъде завършена. (Грешка в OSStatus -9844.)" UserInfo=0x4c38a60 {}"

- (IBAction)performConnection:(id)sender 
{
    asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];   
    NSError *error = nil;
    uint16_t port = [[[self serverPort] text] intValue];

    if (![asyncSocket connectToHost:[serverAddr text] onPort:port error:&error])
    {
        DDLogError(@"Unable to connect due to invalid configuration: %@", error);
        [self debugPrint:[NSString stringWithFormat:@"Unable to connect due to invalid configuration: %@", error]];
    }
    else
    {
        DDLogVerbose(@"Connecting...IP:%@, port:%i", [serverAddr text], port);
    }   
}

- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
    DDLogInfo(@"socket:%p didConnectToHost:%@ port:%hu", sock, host, port);

    NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:3];
    [settings setObject:@"XXX.XXX.X.XXX"
             forKey:(NSString *)kCFStreamSSLPeerName];

    // In fact, don't even validate the certificate chain
    [settings setObject:[NSNumber numberWithBool:NO]
             forKey:(NSString *)kCFStreamSSLValidatesCertificateChain];
    [settings setObject:(NSString*)kCFStreamPropertySocketSecurityLevel
             forKey:(NSString*)kCFStreamSocketSecurityLevelNegotiatedSSL];

    DDLogVerbose(@"Starting TLS with settings:\n%@", settings);

    [sock startTLS:settings];

    [self debugPrint:[NSString stringWithFormat:@"socket:didConnectToHost:%@ port:%hu", host, port]];

    //[sock readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 tag:0]; 
    [sock readDataWithTimeout:-1 tag:0];

}

- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag
{
    DDLogVerbose(@"socket:didWriteDataWithTag:");
    [sock readDataWithTimeout:-1 tag:0];

}


- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
    DDLogVerbose(@"socket:didReadData:withTag:");

    NSString *response = [[NSString alloc] initWithData:data  encoding:NSASCIIStringEncoding];
    NSLog(@"read response:%@", response);
    [self debugPrint:[NSString stringWithFormat:@"Read:  \n%@",response]];
    [response release];

    //NSData *newline = [@"\n" dataUsingEncoding:NSASCIIStringEncoding]; 
    //[sock readDataToData:newline withTimeout:-1 tag: 0]; 
    [sock readDataWithTimeout:-1 tag:0];

}

- (IBAction)sendBuf:(id)sender 
{
    if ([[bufOut text] length] > 0) 
    {
            NSString *requestStr = [NSString stringWithFormat:@"%@\r\n", [bufOut text]];
        NSLog(@"Sending:%@",requestStr);
        NSData *requestData = [requestStr dataUsingEncoding:NSASCIIStringEncoding];
        [asyncSocket writeData:requestData withTimeout:-1.0 tag:0];
        [self debugPrint:[NSString stringWithFormat:@"Sent:  \n%@",requestStr]];
    }

}

person LittlePeculiar    schedule 18.10.2011    source източник
comment
Мисля, че трябва да добавите някакъв код, за да го илюстрирате   -  person ppaulojr    schedule 18.10.2011


Отговори (1)


Намерих частично решение (чиста случайност). Изглежда, че радиото или как е настроено радиото ми позволява да се свързвам/чета/записвам само ако моето приложение или iMac инициират връзката. Добре е с друг компютър. И двете могат да инициират връзка и всичко работи. Все още трябва да разреша това, но поне знам, че кодът ми работи. Благодаря на всеки, който се замисли за моя проблем.

person LittlePeculiar    schedule 19.10.2011