Devo creare un'app di chat per iOS utilizzando la programmazione socket e il mio indirizzo IP è 192.168.0.57:9300
. Ho usato l'esempio di programmazione socket Raywenderlich
, ricevendo dati funzionanti correttamente ma inviando non funzionante, non ci sono errori o crash. Il mio codice è come segue.Come inviare NSString tramite socket utilizzando NSOutputStream
per l'apertura flussi codice
- (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];
}
per l'invio dei dati
- (IBAction)sendMessage:(id)sender
{
NSString *response = @"lets start chat";
NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
[outputStream write:[data bytes] maxLength:[data length]];
}
delegati
- (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];
}
si prega di fornire me suggestione.
Cosa intendi con "mostra la stringa di invio"? Il ricevitore lo mostra così? Qual è il destinatario (quale software, se possibile snippet post sorgente)? Come si elabora la stringa ricevuta? – nullp01nter
Ho allegato tutti i codici code.server sono scritti in php – Suraj
Ho usato il tuo codice esatto per inizializzare una connessione e per inviare traffico di rete da un iPhone al mio Mac. Il software di ricezione è scritto nell'obiettivo C e utilizza anche NSStreams. Tutte le stringhe trasmesse erano OK. Immagino che il tuo problema potrebbe essere sul lato server (PHP). Sei stato in grado di verificare (con un altro software per inviare stringhe) che la tua parte server sta funzionando? – nullp01nter