Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过套接字发送数据时的编码问题_C#_Objective C_Sockets_Networking - Fatal编程技术网

C# 通过套接字发送数据时的编码问题

C# 通过套接字发送数据时的编码问题,c#,objective-c,sockets,networking,C#,Objective C,Sockets,Networking,我正在尝试将数据发送到UDP服务器,但遇到了一些问题。发送后我不接收数据。然后我尝试了一个网络记录器。我可以看到,当我使用NSUTF8Stringencoding时,它会显示在网络日志上,但当我使用nsacienceoding时,它不会发送 我真的需要一些帮助。我正在使用CocaoAsyncUDPSocket。如果没有人能再次帮助接收数据,那就太酷了 这是我的密码: NSString *ipString = @"192.168.0.116:7777"; NSArray *splitArray =

我正在尝试将数据发送到UDP服务器,但遇到了一些问题。发送后我不接收数据。然后我尝试了一个网络记录器。我可以看到,当我使用
NSUTF8Stringencoding
时,它会显示在网络日志上,但当我使用
nsacienceoding
时,它不会发送

我真的需要一些帮助。我正在使用
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#

NSString
编写的相同功能,用于Unicode字符序列,不能用作 这里有一个任意的字节序列

最好先在字节缓冲区中构建消息,并将其直接转换为
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];

非常感谢代码的工作!你能解释一下代码吗,这样我就可以从中学习了?@user3287428:你不懂哪部分?没关系。我现在明白了。虽然我需要一些帮助来读取返回的字节。如何读取字节?下面是字节的布局方式:来自i@user3287428:例如:
const unsigned char*response=[数据字节];int password=响应[11]。你好。现在,我有一些问题。我如何从中取回一封信?比如,如果字节10是“p”,如何将其转换成字符串?