0

这是问题。我从我的 java 服务器打开一个套接字,并使用 Objective-c 发送一个 UTF 字符串,它无法读取。所以,我对出了什么问题感兴趣??:

首先是java代码:

DataInputStream in = new DataInputStream( server.getInputStream()); System.out.println(in.readUTF()); //Just holding, can't print out

完整的源代码在这里:

http://www.tutorialspoint.com/java/java_networking.htm

然后,是我的 iOS 客户端源代码:

NSString *requestStrFrmt = @"HEAD / HTTP/1.0\r\nHost: %@\r\n\r\n";

NSString *requestStr = [NSString stringWithFormat:requestStrFrmt, HOST];
NSData *requestData = [requestStr dataUsingEncoding:NSUTF8StringEncoding];

[asyncSocket writeData:requestData withTimeout:-1.0 tag:0];

iOS客户端的完整源代码:

https://github.com/robbiehanson/CocoaAsyncSocket

我引用的文件路径: CocoaAsyncSocket / GCD / Xcode / SimpleHTTPClient / Mobile / SimpleHTTPClient / SimpleHTTPClientAppDelegate.m

我没有做任何花哨的事情,只是更改了 IP 和端口。这是输出:

Waiting for client on port 7780... Just connected to /192.168.1.31:55207

是的,它们可以连接在一起,但服务器无法读取我发送的字符串。

4

1 回答 1

1

readUTF 方法期望在字符串数据之前将字符串的长度作为 16 位大端数读取。您必须修改客户端以便它发送长度,或者使用另一个函数来读取服务器中的数据。

您似乎正在制作一个 http 客户端和服务器,因此您应该使用第二个选项并让 Java 服务器使用该read方法读取请求。

此外,http 请求头应该用 iso-8859-1 编码,最好是 ASCII,所以使用 UTF-8 编码首先是错误的。

于 2013-08-12T06:02:07.163 回答