2012-03-06 7 views
1

저는 iOS 프로그래밍의 초보자입니다. 제 문제를 해결하는 데 약간의 도움이 필요합니다 ... 나는이 문제에 대한 해결책을 찾으려고 많은 시간을 보냈지만 성공하지 못했습니다 ...TCP 소켓 통신 문제

몇 가지 TCP 명령을 내 서버로 보내는 매우 간단한 응용 프로그램 (iPad)을 작성 중입니다. 서버가 이미 구성되어 제대로 작동하고 있습니다. 내 아이 패드에 pTerm와 연결할 수 있으며, RAW TCP 또는 텔넷을 통해 성공적으로 연결 한 후 그처럼 보이는 내 서버로 요청을 보낼 수 있습니다

#100

하고 입력 그것이 작동하지 않습니다, 서버에 라인 정보의 끝 부분에 문제가 될 것으로 보인다 (일반적으로 키를 입력 눌러 완료) -

그러나 임 내 응용 프로그램에 그것을 할 때

.. 작동합니다. ...하지만 서버 측에서 아무것도 볼 수 없습니다

내 .H 파일 모습을 - 서버는이 서버에 명령을 전송한다 리셋 버튼을 클릭 한 후, 192.168.1.220에 2000

포트 구성 :

#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

연결을 두 번 초기화하려면 을 resetbutonclick 메서드에서 제거하십시오.

+0

좋아, 제거했습니다. 나는 또한 # 100을 보냈지 만 - char-chr (13)의 끝을 보내는 방법을 모른다. 언제 – user1252412

+0

언제? 이제는 작동하지만 다른 캐릭터를 보내시겠습니까? chr (13)? – fbernardo

0

한가지는 즉시 알려주는 스트림 이벤트 hadlers - 어떤 이상한 것입니다. 그 연결이 어떻게 확립되었는지 어떻게 알 수 있습니까?

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

iPhone Network Programming의 코드를 테스트하고 기사 물마루 읽을 의향이 있다면, 노력하고 있습니다.

0

추가 라이브러리를 사용하면 이러한 문제를 피할 수 있습니까? (위에 추상화) 나는 CocoaAsyncSocket을 사용합니다. 그것은 매우 편안하고 간단합니다.