[英]Sending Data from iOS to java socket server and recognizes the message
我不明白這一點,我在我的應用程序中執行此代碼並且在服務器端不能很好地識別消息為什么?
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
這個字符串消息中的II#$ _ 0是我發送的但是000000這個000不是cero是一個正方形但是我不知道怎么寫這個字符。
然后是錯誤
java.io.UTFDataFormatException: malformed input around byte 27 at java.io.DataInputStream.readUTF(DataInputStream.java:639) at java.io.DataInputStream.readUTF(DataInputStream.java:547)
我不明白wh ?? 請抱歉抱歉我的英語非常糟糕。 :/
對不起,我的英格利斯非常糟糕。 :/最后我找到了頭痛的解決方法hahahaha,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;}
干杯.....
DataInputStream.readUTF()
讀取已使用Javadoc for DataOutputStream.writeUTF()
生成的特殊前綴格式編碼的數據。 它不是讀取UTF字符串的通用方法。 使用帶有適當字符集的BufferedReader
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.