【问题标题】:Sending Hex and String to UDP将十六进制和字符串发送到 UDP
【发布时间】:2023-03-19 09:15:01
【问题描述】:

我正在尝试通过 UDP 向服务器发送命令。服务器在开始时需要几个十六进制字节,虽然 PHP 这很容易

'\xFF\xFFcmd command variable'

那我fwrite()那没问题。

现在我正在 Cocoa 中构建一个客户端,但我根本无法让服务器理解我,数据已发送,但我认为它不正确或损坏。我正在尝试使用 CocoaAsyncSocket..

NSString *msg = [NSString stringWithFormat:@"%c%ccmd command variable",0xFF,0xFF];[socket connectToHost:@"85.25.248.160" onPort:28960 error:nil];

unsigned char lendata = [msg length];
NSMutableData *senddata = [NSMutableData dataWithBytes: &lendata length:sizeof(lendata)]  ;
[senddata appendData:[msg dataUsingEncoding:NSUTF8StringEncoding]];

[socket sendData:senddata withTimeout:-1 tag:0];

msg 的 NSLog 是 'ˇˇcmd command variable' 但在我无法访问的服务器上没有发生任何事情来侦听格式错误的数据包。

我的猜测是,通过将0xFF放入字符串中,它不再相同,并且发送错误..

【问题讨论】:

    标签: cocoa sockets udp


    【解决方案1】:

    已解决问题。 NSString 弄乱了 \xff。

    char *bytes = "\xff\xffcmd command variable";
    NSData* data = [[NSData alloc] initWithBytes:bytes length:strlen(bytes)];
    [socket sendData:data withTimeout:-1 tag:0];
    

    以 NSString 或其他形式获取变量..

    char *bytes = "\xff\xff";
    NSString *commands = [[NSString alloc] initWithFormat:@"command %@", variable];  
    NSMutableData *data = [[NSMutableData alloc] initWithBytes:bytes length:strlen(bytes)];
    [data appendData:[commands dataUsingEncoding:NSUTF8StringEncoding]];
    [socket sendData:data withTimeout:-1 tag:0];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-21
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2021-01-28
      相关资源
      最近更新 更多