게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
오브젝티브c 소켓통신 질문드려요..ㅜㅜ 제발알려주세요
게시물ID : programmer_12096짧은주소 복사하기
작성자 : 신입개발자
추천 : 0
조회수 : 1206회
댓글수 : 4개
등록시간 : 2015/07/14 17:33:42
옵션
  • 본인삭제금지
아이폰 어플리케이션에서 간단하게 소켓통신을 하려고 합니다.

인터넷에서 예제를 구해서 풀이하는데 

- (void) initNetworkCommunication {

CFReadStreamRef readStream;

CFWriteStreamRef writeStream;

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"192.168.0.19", 3333, &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];

}


- (IBAction) sendMessage

{

    NSLog(@"%@", inputMessageField.text);

NSString *response  = [NSString stringWithFormat:@"%@\r\n", inputMessageField.text];

NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSUTF8StringEncoding]];

    //

[outputStream write:[data bytes] maxLength:[data length]];

    

inputMessageField.text = @"";


}




- (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:NSUTF8StringEncoding];

if (nil != output) {


NSLog(@"server said: %@", output);

[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;

           

            //[self initNetworkCommunication];

            

break;

default:

NSLog(@"Unknown event");

}

}



이런식으로 코드가 되어있더라구요 

그런데 서버로 sendMessage를 한번 하고 나면

처음에는 메시지가 제대로 가는데 두번째부터 자꾸 Can not connect to the host 메시지가 떠서

저 밑에 [self initNetworkCommunication] 함수를 불러줬더니

그 뒤로는 접속 불가 메시지가 안뜨더라구요

... 근데 저 init~~이 초기화잖아요

메모리를 계속 잡아먹고 계속 연결확인하는것 같은데

저런식으로 하는게 맞을까요??

어떤 예제를 봐도 저런게 없어서 .. 질문드립니다....

제발 알려주세여 ㅠㅠ
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호