将数据从iOS发送到java套接字服务器并识别消息
我不明白这一点,我在我的应用程序中执行此代码,但在服务器端没有很好地识别消息,为什么将数据从iOS发送到java套接字服务器并识别消息,java,ios,Java,Ios,我不明白这一点,我在我的应用程序中执行此代码,但在服务器端没有很好地识别消息,为什么 NSString *init = @"?II#$%_0"; NSData *myData = [init dataUsingEncoding:NSUTF16BigEndianStringEncoding]; uint8_t *readBytes = (uint8_t *)[myData bytes]; int size = [myData length]; int myInteger = CFSwapInt1
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];
在另一端,远程服务器可以识别消息,但不是这样
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);
}
0I0I0#0$0%0 0O0000000000000000#0000000000000000
这是我正在发送的字符串消息中的I#$0,但有000000,这000不是cero,是一个正方形,但我不知道如何写这个字符
接下来是错误
java.io.UTFDataFormatException:字节27周围的输入格式错误
位于java.io.DataInputStream.readUTF(DataInputStream.java:639)
在java.io.DataInputStream.readUTF(DataInputStream.java:547)
我不明白什么??对不起,我的英语很差/
DataInputStream.readUTF()
读取以特殊前缀格式编码的数据,该格式由DataOutputStream.writeUTF()生成,并在Javadoc中描述。它不是读取UTF字符串的通用方法。使用带有适当字符集的BufferedReader
。对不起,我的英语很差:/
最后我找到了解决头痛的办法哈哈哈,耶:)
在java代码下一行的服务器端:
DataInputStream.readUTF();
this.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代码吗?问题很可能是Java希望使用UTF-8、UCS-2或其他编码。我不这么认为,因为在服务器的另一端,没有人会使用下一段代码等待数据DataInputStream.readUTF()
消息出现在服务器中,但对于000000000等其他字符不是零,而是正方形。任何想法请有人帮忙!!!!对不起,我的英语:/这是一个问题,我无法移动或修改服务器端的代码,因为这与Android和bb配合良好,我需要为DataInputStream.readUTF()发送相应的数据,可以很好地读取消息,有什么想法请有人帮助!!!!对不起,我的英语很差:/.@user1276068,所以您需要严格遵守它在DataOutputStream.writeUTF()下指定的内容。显然你不是。