通过套接字传输字节数组
Byte array transferring through socket
我正在尝试在客户端-服务器架构中使用 Socket 发送一个简单的字节数组。使用 Netbeans 进行调试时也存在问题,因为它给出:
SocketException: connection reset
所以我 post 在我的代码下面,如果有人帮助我,我真的很高兴。
客户:
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,但行为是一样的。
以上代码的结果运行是:
[B@25154f
感谢您的关注。
那是因为在您的情况下 String.valueOf
将 Object 作为输入(并将其视为对象)。
如果您确定收到的是字符串,您可以调用 new String(b)
或 new String(b, "UTF-8")
。
尝试替换这个
System.out.println(String.valueOf(b));
有了这个:
System.out.println(new String(b));
这将使用 default encoding
将您的字节数组转换为 String
。如果服务器和客户端都使用相同的 default encoding
,它将起作用,否则您将需要在双方指定编码,如下所示:
在TestClient
"Hello".getBytes(encoding)
在TestServer
System.out.println(new String(b, encoding))
我正在尝试在客户端-服务器架构中使用 Socket 发送一个简单的字节数组。使用 Netbeans 进行调试时也存在问题,因为它给出:
SocketException: connection reset
所以我 post 在我的代码下面,如果有人帮助我,我真的很高兴。
客户:
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,但行为是一样的。
以上代码的结果运行是:
[B@25154f
感谢您的关注。
那是因为在您的情况下 String.valueOf
将 Object 作为输入(并将其视为对象)。
如果您确定收到的是字符串,您可以调用 new String(b)
或 new String(b, "UTF-8")
。
尝试替换这个
System.out.println(String.valueOf(b));
有了这个:
System.out.println(new String(b));
这将使用 default encoding
将您的字节数组转换为 String
。如果服务器和客户端都使用相同的 default encoding
,它将起作用,否则您将需要在双方指定编码,如下所示:
在TestClient
"Hello".getBytes(encoding)
在TestServer
System.out.println(new String(b, encoding))