2012-03-06 2 views
1

Я новичок в программировании на iOS, и мне нужна небольшая помощь в решении моей проблемы ... Я потратил много часов, пытаясь найти решение этой проблемы, но без каких-либо успехов ...Проблема со связью сокета TCP

Я пишу очень простое приложение (на iPad), которое отправит на мой сервер несколько TCP-команд. Сервер уже настроен и работает правильно. Я могу подключиться к нему с pTerm на мой IPad, и после подключения успешно через RAW TCP или телнет я могу отправить запрос на мой сервер выглядит как что:

введите

и его Работы ..

Но когда я пытаюсь сделать это в своем приложении - он не работает, кажется, проблема с концом строки информации на сервер (обычно делается путем нажатия введите ключ). сервер настроен на 192.168.1.220, порт 2000.

После нажатия кнопки сброса он должен послать команду на сервер - но я не могу увидеть что-либо на стороне сервера ...

My .h выглядит файл :

#import <UIKit/UIKit.h> 

NSInputStream *inputStream; 
NSOutputStream *outputStream; 

@interface ViewController : UIViewController <NSStreamDelegate> 

@property (weak, nonatomic) IBOutlet UIButton *resetbutton; 
@property (strong, nonatomic) IBOutlet UIView *viewController; 
- (IBAction)resetbuttonclick:(id)sender; 

@end 

мой .m файл:

#import "ViewController.h" 
@interface ViewController() 
@end 


@implementation ViewController 
@synthesize resetbutton; 
@synthesize viewController; 

- (void) viewDidLoad 
{ 
    [self initNetworkCommunication]; 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void) viewDidUnload 
{ 
    [self setViewController:nil]; 
    [self setResetbutton:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 

- (void)initNetworkCommunication 
{ 
    CFReadStreamRef readStream; 
    CFWriteStreamRef writeStream; 
    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"192.168.1.220", 2000, &readStream, &writeStream); 
    inputStream = objc_unretainedObject(readStream); 
    outputStream = objc_unretainedObject(writeStream); 
    [inputStream setDelegate:self]; 
    [outputStream setDelegate:self]; 
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
    [inputStream open]; 
    [outputStream open]; 
} 

- (void)sendMessage 
{ 
    NSString *response = [NSString stringWithFormat:@"#100\n"]; 
    NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]]; 
    [outputStream write:[data bytes] maxLength:[data length]]; 
} 

- (IBAction)resetbuttonclick:(id)sender 
{ 
    [self initNetworkCommunication]; 
    [self sendMessage]; 
} 

@end 

большое спасибо за вашу помощь.

ответ

2

Вы инициируете соединение два раза, удалите линию [self initNetworkCommunication]; из метода resetbutonclick.

+0

Хорошо, я удалил его. Я также проверил - что отправлено # 100, но я не знаю, как отправить символ конца строки (13). Когда – user1252412

+0

Когда? Теперь он работает, но вы хотите отправить другого персонажа правильно? CHR (13)? – fbernardo

0

Одна вещь, которую вы сразу же уведомляете, у вас нет каких-либо событийных событий в проливе - что странно. Откуда вы знаете, что связь была установлена?

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode

Код в iPhone Network Programming проверена и работает, если вы готовы читать корыта статьи.

0

Возможно, вы можете избежать таких проблем, используя дополнительную библиотеку? (абстракция сверху) Я использую CocoaAsyncSocket. Это очень просто удобно.

Смежные вопросы