我使用CocoaAsyncTask
在Objective C中创建了服务器,如果我从telnet连接localhost和同一网络,它工作正常。
现在我有一个Java客户端,可以与另一个Java服务器一起工作,我无法进行通信;服务器端没有收到任何消息。
供参考,这是Java客户端代码:
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("192.168.0.106",4353);
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(),true);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Enter message: ");
String msg = br.readLine();
if (msg != null && !msg.equals("bye"))
{
printWriter.println(msg);
}
else
{
break;
} } } catch (IOException e) {e.printStackTrace();} } }
服务器Objective C代码:
...
[newSocket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:15.0 tag:0];
...
(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
dispatch_async(dispatch_get_main_queue(), ^{
@autoreleasepool {
DDLogInfo(@"data: %@", data);
NSData *strData = [data subdataWithRange:NSMakeRange(0, [data length] - 2)];
DDLogInfo(@"Info: %@", strData);
NSString *msg = [[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding];
DDLogInfo(@"Info: %@", msg);
我们最后尝试追加\n
和\r
,但没有成功。
什么可能导致这种错过沟通?
答案 0 :(得分:0)
问题出在服务器端,通过使用readDataToData
而不是readDataWithTimeout
从套接字接收数据。
最有可能的是,问题在于行尾,因此库不会将其作为一行处理,因此不会为下一个数据调用该方法。