gpt4 book ai didi

objective-c - 向 Minecraft 服务器发送数据包 : Objective c

转载 作者:行者123 更新时间:2023-12-03 16:43:16 25 4
gpt4 key购买 nike

我一直在尝试从我的自定义Cocoa应用程序(当然是用objective-c编写的)将数据包发送到minecraft服务器。不过,我对如何做到这一点有点困惑。我是用Java做的。那很容易。尽管事实证明这样做更具挑战性,但这是 Objective-C 的做法。

这是我正在使用的代码:

- (void)handshake
{
PacketHandshake *packet = [PacketHandshake packetString:[NSString stringWithFormat:@"%@;%@:%i", username, IP, PORT]];
[packet writeData:dataOut];
}

哪个调用:

- (void)writeData:(NSOutputStream *)dataOut
{
[super writeData:dataOut]; //Writes the "header" which is a char with the value of 0x02 (char packetID = 0x02)
NSUInteger len = [string lengthOfBytesUsingEncoding:NSUTF16BigEndianStringEncoding]; //Getting the length of the string i guess?
NSData *data = [string dataUsingEncoding:NSUTF16BigEndianStringEncoding]; //Getting string bytes?
[dataOut write:(uint8_t*)len maxLength:2]; //Send the length?
[dataOut write:[data bytes] maxLength:[data length]]; //Send the actual string?
}

我已经事先与服务器建立了成功的连接,但我真的不知道我是否正确发送了数据包。有人可以解释一下我应该如何发送各种数据类型和对象吗? (int、byte/char、short、double、NSString、BOOL/bool)

此外,是否有任何特定或通用的方式来发送像 Minecraft 所需的数据包?

好吧,我想现在的问题是:数据类型(主要是字符串)在 Java 和 Objective-C 中如何关联?

感谢任何帮助,谢谢!

没人知道吗?

最佳答案

也许您遇到了网络/主机字节顺序问题?我对 Minecraft 知之甚少,但我注意到有人提到了 here Minecraft 协议(protocol)中的 Shorts 使用网络字节顺序,即大尾数法(所有其他数据类型均为 1 字节长,因此尾数法无关)。所有 x86 机器都使用小端。

我不知道您的 PacketHandshake 类在发送数据之前是否正在转换数据 - 如果没有,您可以使用 C 库函数 ntohs()htons() ,您需要包含 sys/types.h 和网络/in.h该链接还提到字符串是标准 ASCII 字符的 64 字节数组,并用 0x20 填充。您可以通过执行 [string UTF8String] 从 NSString 中获取 ASCII 值,它返回 const char* - 即以 0x0 结尾的标准 C 字符串,然后可能垫它。但如果它只适用于 Java,那么也许您不需要。

关于objective-c - 向 Minecraft 服务器发送数据包 : Objective c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10859049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com