嗨,我有下一个问题,为什么当我发送这样的数据
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);
}
Run Code Online (Sandbox Code Playgroud)
在java套接字服务器的另一端
connection = new Socket(Constants.HOST, Constants.CHAT_LISTENER_PORT);
_in = new DataInputStream(connection.getInputStream());
String data = _in.readUTF();
Run Code Online (Sandbox Code Playgroud)
但没有任何东西看起来好像没有发送任何东西.
我读了很多,我发现问题来自平台,因为java字节适用于big-endians和带小端的iOS,但我没有找到有关如何做到这一点的信息.
uint8_t buffer [11] ="我发送此信息"; 到big-Endians格式
请heellppp,谢谢.
对不起,我的英语非常好,但西班牙语中没有任何内容:/ thaks.
在java代码中的下一行的服务器端:
DataInputStream.readUTF();
Run Code Online (Sandbox Code Playgroud)
这个.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);
}
Run Code Online (Sandbox Code Playgroud)
而魔术来自:
- (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;}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2308 次 |
| 最近记录: |