Muszę utworzyć aplikację do czatu dla systemu iOS przy użyciu programowania gniazd, a mój adres IP to 192.168.0.57:9300
. Użyłem przykładu programowania gniazda, odbierając dane działające poprawnie, ale wysyłanie nie działa, nie ma żadnych błędów ani awarii. Mój kod jest następujący.Jak wysłać NSString przez gniazdo przy użyciu NSOutputStream
do otwierania strumieni kod
- (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];
}
do wysyłania danych
- (IBAction)sendMessage:(id)sender
{
NSString *response = @"lets start chat";
NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
[outputStream write:[data bytes] maxLength:[data length]];
}
Delegaci
- (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];
}
proszę podać mi sugestia.
Co masz na myśli, mówiąc "pokazuje ciąg wysyłania"? Czy odbiorca tak to pokazuje? Co to jest odbiornik (jakie oprogramowanie, fragment kodu źródłowego, jeśli to możliwe)? Jak przetwarzasz otrzymany ciąg? – nullp01nter
Mam dołączony cały kod code.server są napisane w php – Suraj
Użyłem twojego dokładnego kodu, aby zainicjować połączenie i wysłać ruch sieciowy z iPhone'a do mojego Macintosha. Oprogramowanie odbierające jest napisane w Objective C, a także przy użyciu NSStreams. Wszystkie wysłane ciągi były w porządku. Domyślam się, że twój problem może być po stronie serwera (PHP). Czy byłeś w stanie zweryfikować (za pomocą innego oprogramowania do wysyłania łańcuchów), że twoja część serwera działa? – nullp01nter