0
나는 GCDAsyncSocket을 사용하고 내가 쓰고 이런 식으로 읽어아이폰 OS : GCDAsyncSocket와 태그 내 응용 프로그램에서
- (void) socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
NSLog(@"did read data");
if (tag == 1){
//analyze my data...
[self.socket readDataWithTimeout:-1 tag:1];
}
: 나는 대리자 메서드에서 데이터를 읽을 후
NSData *bufferWriteData = [NSData dataWithBytesNoCopy:bufferWrite length:17 freeWhenDone:YES];
[self.socket writeData:bufferWriteData withTimeout:-1 tag:1];
[self.socket readDataWithTimeout:-1 tag:1];
이 대리자 메서드 내에서 "readDataWithTimeout"을 이렇게 불러 와서 모든 데이터를 읽습니다.
내가 할 경우, 새 통화를 할 문제 아이디 :
[self.socket writeData:bufferWriteData withTimeout:-1 tag:2];
[self.socket readDataWithTimeout:-1 tag:2];
내가 새로운 쓰기와 태그 = 2로 새로운 읽기를 시작합니다; 델리게이트 메소드 "didReadData"가 my code라고 불리우면 tag = 1의 블록 안에 입력하십시오; 새 태그를 인식하지 못하는 것 같습니다.
왜 그런가?
태그의 쓰기와 읽기 사이에는 아무런 관련이 없습니다. – user523234
다른 독자를 관리하는 방법은 무엇입니까? – CrazyDev
데이터를 보낼 때 데이터 앞에 헤더를 추가하여 데이터가 끝날 때 피어에게 알려야합니다. 헤더에는 데이터의 길이를 나타내는 길이 필드와 데이터 색인을 나타내는 ID 필드가 있어야합니다. id 필드는 코드에서 태그로 작동하지만 서버에서 동일한 ID로 응답을 보내야합니다. – KudoCC