2016-05-30 213 views
1

我想在客户端 - 服务器体系结构中使用Socket发送一个简单的字节数组。有问题也与Netbeans的调试,因为它提供了:通过套接字传输字节数组

SocketException:连接重置

所以我下面张贴我的代码,我真的很喜欢,如果有人可以帮助我。

客户:

public class TestClient { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    try { 
     Socket s = new Socket("127.0.0.1", 3242);  

     byte[] b; 
     b = "Hello".getBytes(); 
     DataOutputStream os = new DataOutputStream(s.getOutputStream()); 
     os.write(b); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 


} 

}

服务器:

public class TestServer { 

public static void main(String[] args) { 
    try { 

     byte[] b = new byte[5]; 
     Socket s = new ServerSocket(3242).accept(); 
     DataInputStream is = new DataInputStream(s.getInputStream()); 
     is.read(b); 
     System.out.println(String.valueOf(b)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    }   
} 

}

我试图用InputStream和OutputStream简单,但行为是一样的。

运行上面这些代码的结果是:

[[email protected] 

谢谢您的关注。

回答

0

尝试更换此

System.out.println(String.valueOf(b)); 

有了这个:

System.out.println(new String(b)); 

这将使用default encoding您的字节数组转换为String。它会工作,如果服务器和客户端使用相同的default encoding否则你将需要指定为未来两侧的编码:

TestClient"Hello".getBytes(encoding)

TestServerSystem.out.println(new String(b, encoding))

+0

问题解决。谢谢。 :) –

+0

npbr,不客气 –

0

那是因为在你的情况下,String.valueOf将Object作为输入(并将其视为对象)。

如果您确定收回字符串,则可以拨打new String(b)new String(b, "UTF-8")

+0

现在的结果是[72 ,101,108,108,111]。它是字节中“Hello”的正确表示。从这个角度来看,我该如何获得“Hello”作为String?谢谢。 (@NicolasFilotto给了我使用String构造函数的方式)再次感谢。 –