簡體   English   中英

目標C套接字服務器未收到Java套接字客戶端消息

[英]Objective C Socket Server does not receive Java Socket Client Messages

我使用CocoaAsyncTask在Objective C中創建了服務器,如果我從telnet既連接本地主機又連接同一網絡,則可以正常工作。

現在,我有一個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 ,但沒有成功。

是什么原因導致這種誤通信?

問題出在服務器端,通過使用readDataToData而不是readDataWithTimeout從套接字接收數據。

最有可能的問題是行尾,因此庫不會將其作為行處理,因此不會為下一個數據調用該方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM