Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据从iOS发送到java套接字服务器并识别消息_Java_Ios - Fatal编程技术网

将数据从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()下指定的内容。显然你不是。