目标C套接字服务器不接收Java套接字客户端消息

时间:2017-03-28 17:55:20

标签: java objective-c sockets

我使用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,但没有成功。

什么可能导致这种错过沟通?

1 个答案:

答案 0 :(得分:0)

问题出在服务器端,通过使用readDataToData而不是readDataWithTimeout从套接字接收数据。

最有可能的是,问题在于行尾,因此库不会将其作为一行处理,因此不会为下一个数据调用该方法。