2017-03-28 13 views
0

CocoaAsyncTaskを使用してObjective Cでサーバーを作成しましたが、ローカルホストと同じネットワークの両方でtelnetから接続すると問題なく動作します。目的CソケットサーバーがJavaソケットクライアントメッセージを受信しない

私は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

readDataWithTimeoutではなく、readDataToDataを使用してソケットからデータを受信することで問題がサーバー側にありました。

ほとんどの場合、問題は行末にあるため、ライブラリは行として処理しないため、次のデータのメソッドを呼び出すことはありません。

関連する問題