2016-03-25 8 views
0

Bir C sunucusundan bir Java istemcisine bir dizi dize (char ** topics) göndermeye çalışıyorum. Görünüşe göre, sunucu konuları doğru bir şekilde gönderir, ancak istemci bunları almaz.C sunucusundan Java istemcisine ileti gönderme

/* SERVER */ 
while (*topics != NULL) { 
    printf(" > Sending topic '%s'.. ", *topics); 
    if(write(sd, *topics, sizeof(*topics)) == -1) { 
     perror("write"); 
     exit(1); 
    } 
    printf("[OK]\n"); 

    topics++; 
} 

istemci şuna benzer:

/* CLIENT */ 
static void server_connection() { 
     String topic = null; 

     try { 
      Socket _sd = new Socket(_server, _port); // Socket Descriptor 

      // Create input stream 
      DataInputStream _in = new DataInputStream(_sd.getInputStream()); 
      BufferedReader _br = new BufferedReader(new InputStreamReader(_in)); 

      System.out.println("s> Current Topics:"); 

      while ((topic = _br.readLine()) != null) { 
       System.out.println(topic); 
      } 

      if(topic == null) { 
       System.out.println("Not topics found"); 
      } 



      // Close socket connection 
      _out.close(); 
      _in.close(); 
      _sd.close(); 

     } catch(IOException e) { 
     System.out.println("Error in the connection to the broker " + _server + ":" + _port); 
    } 
    } 

istemci

s> Current Topics: 

gösterir ve bekliyor kalır ...:/

+2

C. 'dekieof işlevini okumak isteyebilirsiniz C. – Olaf

+1

C sunucusu akış üzerinde yeni satır karakteri mi gönderiyor? Java'da 'readLine' engelleniyor. – rgettman

+0

"\ n" konusunu konunun sonuna kadar birleştirmeyi denedim, ancak hala aynı – nash

cevap

2
write(sd, *topics, sizeof (*topics)) 
  1. topicschar**, *topicschar işaretçisidir. Bu nedenle, sizeof *topics, bu işaretçinin boyutuna göre, mimarinize bağlı olarak 2 veya 4 veya 8 bayttır. İstediğin bu değil. Bunların boş sonlandırılmış dizeler olduğu varsayılarak strlen(*topics) olmasını istersiniz.

  2. Alıcıda çizgiler okurken, göndericiye çizgiler göndermeniz gerekir. Veriler zaten bir satırsonu içermedikçe, göndericiye bir tane eklemeniz gerekir.