2012-03-06 14 views
1

私はiOSプログラミングの初心者です - 私は私の問題を解決するために少し助けが必要です... 私はこの問題の解決策を見つけようと多くの時間を費やしました。TCPソケット通信の問題

私は非常に単純なアプリケーション(iPad上)を書いています。このアプリケーションは、いくつかのTCPコマンドを私のサーバーに送信します。サーバーは既に構成され、正常に動作しています。私は私のiPadでPTERMとそれに接続することができ、およびRAW TCPまたはtelnetを介して正常に接続した後、私はそのように見ている私のサーバーにリクエストを送信することができます。

し、それを入力してください私がアプリケーション上でそれをやろうとしているときに、正常に動作しない場合は、サーバーへの回線情報の最後に問題があるようです(普通を入力してを入力してください)。 Serverが192.168.1.220に設定され、ポート2000

リセットボタンをクリックした後、それがサーバーにコマンドを送信する必要があります - しかし、私は、サーバー側で何を見ることができない...

マイ.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

接続を2回初期化する場合は、をresetbutonclickメソッドから削除します。

+0

[OK]を削除しました。私はまた#100が送られていることを確認しましたが、行末のchar-chr(13)を送る方法はわかりません。いついつ? – user1252412

+0

いつですか?それで今働いていますが、もう一人のキャラクターを送りたいですか? chr(13)? – fbernardo

0

すぐに気づいているのは、ストリームイベントハザーダーがないことです。これは奇妙です。接続が確立されたことをどのように知っていますか?

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

iPhone Network Programmingのコードがテストされ、あなたが記事を谷読むために喜んでいる場合は、作業しています。

0

追加のライブラリを使用することで、このような問題を回避できますか? (上の抽象化) 私はCocoaAsyncSocketを使用します。快適でとてもシンプルです。