嗨,我有下一个问题,为什么当我发送这样的数据时
uint8_t buffer[11] = "I send this";
NSInteger nwritten = [outputStream write:buffer maxLength:sizeof(buffer)];
if (-1 == nwritten) {
NSLog(@"Error writing to stream %@: %@", outputStream, [outputStream streamError]);
}else{
NSLog(@"Wrote %i bytes to stream %@.", nwritten, outputStream);
}
在java套接字服务器的另一端
connection = new Socket(Constants.HOST, Constants.CHAT_LISTENER_PORT);
_in = new DataInputStream(connection.getInputStream());
String data = _in.readUTF();
但没有任何东西看起来好像它没有发送任何东西。
我读了很多书,发现问题出在平台上,因为 java 字节适用于大端字节序,而 iOS 则适用于小端字节序,但我没有找到有关如何做到这一点的信息。
uint8_t buffer[11] = "我发送这个";大端格式
请heellppp,谢谢。
抱歉,我的英语非常好,但没有西类牙语:/thaks。
最佳答案
在下一行 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/9752580/