2017-04-06 166 views
-1

我正在執行此代碼,並且當我創建稱爲緩衝區的字節數組時,它被初始化爲0,所以當我執行.read()函數時,它不會等待讀取任何內容,因爲緩衝區是充分。 當我申報和itialize緩衝區並打印後,如果它充滿了零等等讀它不等待從套接字recive數據。從Java的套接字讀取字節

欲recive從交流服務器正在發送一個char []消息

public class th extends Thread { 
    public static ServerSocket sc; 
    public static byte[] buffer = new byte[256]; 

    public th(){ 
     sc = null; 
    } 

    public th (ServerSocket userSC){ 
     sc = userSC; 
    } 

    public void run() { 
     System.out.println("En la clase TH"); 
     Socket serverAddr; 
     boolean condicion = true; 
     DataInputStream in; 
    int p; 

    for (p = 0; p < 256; p++) System.out.print(buffer[p] + " "); 
     /*try { 
      serverAddr = sc.accept(); 
      in = new DataInputStream(serverAddr.getInputStream()); 
     } 
     catch (Exception e){ 
      System.err.println("Error creando socket"); 
     }*/ 
     try { 
      System.err.println("-1---------------------------------"); 
      serverAddr = sc.accept(); 
      in = new DataInputStream(serverAddr.getInputStream()); 
      System.err.println("0---------------------------------"); 
      System.err.println("1---------------------------------"); 

      in.read(buffer); 
      for (p = 0; p < 256; p++) System.out.print(buffer[p] + " "); 
      int a = in.read(buffer); 
      if (a < 0) { 
       exit(); 
      } 
      for (p = 0; p < 256; p++) System.out.print(buffer[p] + " "); 
      String res = new String(buffer); 
      System.out.println(res); 
      System.out.println("NO ESPERA"); 
      serverAddr.close(); 
     } 
     catch (IOException e){ 
      System.err.println("Error creando socket"); 
     } 
    } 
} 
+1

請花些時間來清晰地設置代碼的格式並使用常規名稱 - 您應該儘可能讓您的問題容易理解。它無助於你忽略'read'返回的值... –

+0

它與緩衝區的初始值沒有任何關係。這個cide不會等待讀取任何東西的唯一原因是如果read()返回-1,這是一種你忽略的可能性,表明對等關閉了連接。請格式化這個難以辨認的混亂。 – EJP

+0

是的,read()函數返回-1,但我不知道原因。如果你能幫助我......( – MrSman

回答

0

我執行此代碼,當我創建名爲緩衝器字節數組,它是由0

初始化的字節

正確,假設你的意思是'用0初始化'。

所以當我做.read()函數時,它不會等待讀取任何內容,因爲緩衝區已滿。

不正確的,確實完全是毫無意義的廢話。由於Java中的所有原始數組都被初始化爲零,所以您建議使所有I/O完全不可能,而這顯然不是。這個建議沒有開始有意義。

當我聲明並初始化緩衝區並在此之後打印它時,它充滿了零等等讀取它不等待從套接字中recive數據。

再次,這是無稽之談。實際的問題是read()返回-1,表示對等體已斷開連接。你完全忽視了那個返回值。

如果是肯定的,你也應該用它來代替256來限制你的打印循環。不能保證read()填充緩衝區。

NB serverAddrSocket,而不是'地址'。不要使用誤導性的變量名稱。你會誤導你的第一個人是你自己。