2014-02-08 2 views
0

UDP 서버로 데이터를 보내려고하는데 문제가 있습니다. 전송 후 데이터를받지 못합니다. 그런 다음 네트워크 로거를 시도했습니다. 그리고 내가 NSUTF8Stringencoding을 사용하면 네트워크 로그에 표시되지만, NSASCIIEncoding을 사용하면 전송되지 않습니다.소켓을 통해 데이터를 전송할 때 인코딩 문제가 발생했습니다.

정말 도움이 필요합니다. CocaoAsyncUDPSocket을 사용하고 있습니다. 아무도 데이터 수신을 다시 도울 수 없다면 정말 멋지다. 여기

내 코드입니다 :

NSString *ipString = @"192.168.0.116:7777"; 
NSArray *splitArray = [ipString componentsSeparatedByString:@":"]; 

NSString *ip = [splitArray objectAtIndex:0]; 
NSString *port = [splitArray objectAtIndex:1]; 

NSArray *ipArray = [ip componentsSeparatedByString:@"."]; 
char ipNumber1 = [self chr:[[ipArray objectAtIndex:0] intValue]]; 
char ipNumber2 = [self chr:[[ipArray objectAtIndex:1] intValue]]; 
char ipNumber3 = [self chr:[[ipArray objectAtIndex:2] intValue]]; 
char ipNumber4 = [self chr:[[ipArray objectAtIndex:3] intValue]]; 

char portByte1 = [self chr:[port intValue] & 0xFF]; 
char portByte2 = [self chr:[port intValue] >> 8 & 0xFF]; 
NSString *packetString = [NSString stringWithFormat:@"SAMP%c%c%c%c%c%cp4150", ipNumber1, ipNumber2, ipNumber3, ipNumber4, portByte1, portByte2]; 

GCDAsyncUdpSocket *socket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 
NSError *err = nil; 
NSData *data = [packetString dataUsingEncoding:NSASCIIStringEncoding]; 
[socket sendData:data toHost:ip port:[port intValue] withTimeout:-1 tag:1]; 
NSLog(@"%@", packetString); 

결코 호출되지 도착이 하나

여기
-(void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext; { 

    NSLog(@"Received data"); 
} 

는 C#으로 작성된 동일한 기능이다는 http://wiki.sa-mp.com/wiki/Query_Mechanism/Csharp

답변

0

NSString 유니 코드 문자의 순서입니다 여기에있는 임의의 바이트 시퀀스 의 컨테이너로 사용할 수 없습니다.

당신은 더 나은 첫번째 바이트 버퍼에서 메시지를 작성하고 NSData에 직접 그 변환 :

unsigned char buffer[20]; // Choose a size that is large enough for your messages 
memcpy(&buffer[0], "SAMP", 4); 
buffer[4] = [[ipArray objectAtIndex:0] intValue]; 
buffer[5] = [[ipArray objectAtIndex:1] intValue]; 
buffer[6] = [[ipArray objectAtIndex:2] intValue]; 
buffer[7] = [[ipArray objectAtIndex:3] intValue]; 
buffer[8] = [port intValue] & 0xFF; 
buffer[9] = [port intValue] >> 8 & 0xFF; 
memcpy(&buffer[10], "p4150", 5); 
int messageSize = 15; 
NSData *data = [NSData dataWithBytes:buffer length:messageSize]; 
+0

덕분에 그 코드가 일을 작정! 코드를 설명 할 수 있습니까? 그렇기 때문에 코드를 배울 수 있습니까? – user3287428

+0

@ user3287428 : 어느 부분을 이해하지 못합니까? –

+0

신경 쓰지 마세요. 나는 그것을 지금 이해한다. 내가 바이트를 읽는 데 도움이 될지 모르지만 나는 돌아온다. 바이트를 어떻게 읽습니까? 바이트 배열 방법은 다음과 같습니다. http://wiki.sa-mp.com/wiki/Query_Mechanism#Response_from_i i – user3287428

관련 문제