0
我试图将数据发送到UDP服务器,并且出现了一些问题。发送后我没有收到数据。然后我尝试了一个网络记录器。我可以看到当我使用NSUTF8Stringencoding
它显示在网络日志上,但是当我使用NSASCIIEncoding
时,它不会发送。通过套接字发送数据时的编码问题
我真的很喜欢一些帮助。我正在使用CocaoAsyncUDPSocket
。如果anynone可以帮助再次获得数据,那将非常酷。
这里是我的代码:
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
非常感谢该代码的工作!你有可能解释代码,所以我可以从中学习吗? – user3287428
@ user3287428:哪部分你不明白? –
没关系。我现在明白了。尽管我可以在阅读返回的字节时使用一些帮助。我如何读取字节?下面是字节的排列方式:http://wiki.sa-mp.com/wiki/Query_Mechanism#Response_from_i i的一个响应 – user3287428