iPhone中使用socket的步骤如下:1. 设置端口、IP2. 设置run loop3. 打开output stream4. 在open complete时初始化5. 在has space available时执行操作6. 添加end encountered或error occurred时的处理代码 - (IBAction)send:(id)sender { NSURL *website = [NSURL URLWithString:str_IP]; NSHost *host = [NSHost hostWithName:[website host]]; [NSStream getStreamsToHost:host port:1100 inputStream:nil outputStream:&oStream]; [oStream retain]; [oStream setDelegate:self]; [oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [oStream open]; } - (void) stream: (NSStream *) stream handleEvent: (NSStreamEvent) eventCode { //printf("EVENT: Start./n"); switch(eventCode) { case NSStreamEventOpenCompleted: { //printf("EVENT: Open completed./n"); if(stream == oStream) { //printf("Sending.../n"); NSData *data = UIImageJPEGRepresentation(drawImage.image, 90); NSInteger x = [oStream write:[data bytes] maxLength:[data length]]; } break; } case NSStreamEventEndEncountered: { //printf("EVENT: End encountered./n"); break; } case NSStreamEventHasSpaceAvailable: { if(stream == oStream) { NSData *data = UIImageJPEGRepresentation(drawImage.image, 90); // Convert from host to network endianness uint32_t length = (uint32_t)htonl([data length]); // Don't forget to check the return value of 'write' [oStream write:(uint8_t *)&length maxLength:4]; [oStream write:[data bytes] maxLength:length]; } break; } case NSStreamEventHasBytesAvailable: { //printf("EVENT: Has bytes available./n"); break; } case NSStreamEventErrorOccurred: { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error Occurred" message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; [alert release]; break; } case NSStreamEventNone: { //printf("EVENT: None./n"); break; } } //printf("EVENT: End./n"); }