gpt4 book ai didi

java - 将数据从 iOS 发送到 java 套接字服务器并识别消息

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:23:54 25 4
gpt4 key购买 nike

我不明白,我在我的应用程序中执行此代码,但在服务器端无法很好地识别消息,为什么?

NSString *init = @"?II#$%_0";
NSData *myData = [init dataUsingEncoding:NSUTF16BigEndianStringEncoding];
uint8_t *readBytes = (uint8_t *)[myData bytes];
int size = [myData length];
int myInteger = CFSwapInt16HostToBig(size);
NSInteger nwritten = [outputStream write:readBytes maxLength:myInteger];

而在远程服务器的另一端识别消息但不是这样。

0I0I0#0$0%0_0O0000000000000000#0000000000000000

我发送的字符串消息中有 I I # $ _ 0,但带有 000000,这个 000 不是 cero,是一个正方形,但我不知道如何写这个字符。

然后是错误

java.io.UTFDataFormatException:字节 27 附近的格式错误的输入
在 java.io.DataInputStream.readUTF(DataInputStream.java:639)
在 java.io.DataInputStream.readUTF(DataInputStream.java:547)

我不明白什么??请帮助抱歉我的英语很糟糕。 :/

最佳答案

对不起,我的英语很糟糕。 :/终于找到解决头痛的办法了哈哈哈哈,yeaaa :)

在下一行 java 代码中的服务器端:

DataInputStream.readUTF();

这个 .readUTF() 期望一个 UTF java 原生类型,这与 objective-c 类型不同,解决方案是像这样发送编码为 UTF 原生 java 的字符串。

NSString *msg = @"initChat_";
NSString *messageToSend = [NSString stringWithFormat:@"%@", msg];
NSData *data = [self convertToJavaUTF8:messageToSend];

int dataLenght = [data length];

int num = [outputStream write:(const uint8_t *)[data bytes] maxLength:dataLenght];


if (-1 == num) {
NSLog(@"Error writing to stream %@: %@", outputStream, [outputStream streamError]);
}else{
NSLog(@"Wrote %i bytes to stream %@.", num, outputStream);
}

魔法来自:

- (NSData*) convertToJavaUTF8 : (NSString*) str {
NSUInteger len = [str lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
Byte buffer[2];
buffer[0] = (0xff & (len >> 8));
buffer[1] = (0xff & len);
NSMutableData *outData = [NSMutableData dataWithCapacity:2];
[outData appendBytes:buffer length:2];
[outData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
return outData;}

干杯......

关于java - 将数据从 iOS 发送到 java 套接字服务器并识别消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9796633/

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