2017-04-06 165 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,而不是'地址'。不要使用误导性的变量名称。你会误导你的第一个人是你自己。