So senden Sie ein NSString über socket mit NSOutputStream

Muss ich schaffen, eine chat-app für iOS verwenden von socket-Programmierung und meine IP-Adresse ist 192.168.0.57:9300.
Ich habe verwendet Raywenderlich socket Programmierung Beispiel,empfangen von Daten funktioniert einwandfrei, aber das senden funktioniert nicht ,es gibt keine Fehler oder Absturz.
Mein code sind wie folgt.

code für die öffnung der Bäche

- (void) initNetworkCommunication {

    CFReadStreamRef readStream;
    CFWriteStreamRef writeStream;
    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"192.168.0.57", 9300, &readStream, &writeStream);

    inputStream = (NSInputStream *)readStream;
    outputStream = (NSOutputStream *)writeStream;
    [inputStream setDelegate:self];
    [outputStream setDelegate:self];
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream open];
    [outputStream open];    
}

code zum senden der Daten

- (IBAction)sendMessage:(id)sender
{
        NSString *response  = @"lets start chat";
        NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
        [outputStream write:[data bytes] maxLength:[data length]]; 
}

Delegierten

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {

    NSLog(@"stream event %i", streamEvent);

    switch (streamEvent) {

        case NSStreamEventOpenCompleted:
            NSLog(@"Stream opened");
            break;
        case NSStreamEventHasBytesAvailable:

            if (theStream == inputStream) {

                uint8_t buffer[1024];
                int len;

                while ([inputStream hasBytesAvailable]) {
                    len = [inputStream read:buffer maxLength:sizeof(buffer)];
                    if (len > 0) {

                        NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];

                        if (nil != output) {

                            NSLog(@"\nreciving data------%@,buffer);

                            [self messageReceived:output];

                        }
                    }
                }
            }
            break;


        case NSStreamEventErrorOccurred:

            NSLog(@"Can not connect to the host!");
            break;

        case NSStreamEventEndEncountered:

            [theStream close];
            [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
            [theStream release];
            theStream = nil;

            break;
        default:
            NSLog(@"Unknown event");
    }

}
Message sending
    - (void) messageReceived:(NSString *)message {

        [self.messages addObject:message];
        [self.tView reloadData];
        NSIndexPath *topIndexPath = [NSIndexPath indexPathForRow:messages.count-1 
                                                       inSection:0];
        [self.tView scrollToRowAtIndexPath:topIndexPath 
                          atScrollPosition:UITableViewScrollPositionMiddle 
                                  animated:YES];

    }

bitte geben Sie mir Ihren Vorschlag.

  • Was meinst du mit "es zeigt die send-string"? Besitzt der receiver zeigen, dass es so ist? Was ist der Empfänger (welche Software, post-source-snippet, wenn möglich)? Wie verarbeiten Sie die empfangene Zeichenfolge?
  • Ich habe anbei der gesamte code.server-code in php geschrieben sind
  • Ich habe Ihre genauen code zum initialisieren einer Verbindung und senden von Netzwerk-traffic von einem iPhone auf meinem Mac. Die empfangende software ist in Objective C geschrieben und auch mit NSStreams. Alle übermittelten strings waren OK. Ich denke, dein problem könnte sein, auf der server-Seite (PHP). Haben Sie schon in der Lage zu überprüfen (mit anderen software zum senden von strings), die Ihre server-Teil funktioniert?
  • Hi ich bin auch dabei, dies in android, Es ist in Ordnung, die in android mit der gleichen Php-server
  • server-Seite verwenden phpwebsocket code, die heruntergeladen werden kann von hier aus code.google.com/p/php-websocket-server - code.google.com/p/php-websocket-server/wiki/Scripting
  • Hast du einen Weg aus der es bin ich immer das : server gesagt: :{"type":"usermsg","name":null,"message":null,"Farbe":null}
  • In meinem Fall-code nicht eingibt NSStreamEventHasBytesAvailable Abschnitt. Was könnte der Grund dafür sein?

InformationsquelleAutor Suraj | 2012-10-10
Schreibe einen Kommentar