java - 将数据从 iOS 发送到 java 套接字服务器

标签 java objective-c

嗨,我有下一个问题,为什么当我发送这样的数据时

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/

相关文章:

java - 如何跟踪这个递归函数?

ios - 更新 Firebase Messaging 时出现“架构 x86_64 的重复符号”

objective-c - ARC 和自定义 deallocs

java - 在 Spring Integration 中等待所有线程完成

java-me - 适用于 MIPS 的 CDC for Oracle Java ME 嵌入式客户端资源

ios - 如何针对随 SDK 变化的方法创建单元测试?

ios - 将点击手势转发到 UICollectionViewCell 的 super View

ios - 锁定文件以便在 Dropbox 中编辑

java - Oracle和JDBC计算事务期间发生的执行次数及其性能

java - Basic Java - 一个内部(嵌套?)类可以访问另一个吗?