Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过套接字传输字节数组_Java_Arrays_Sockets_Byte - Fatal编程技术网

Java 通过套接字传输字节数组

Java 通过套接字传输字节数组,java,arrays,sockets,byte,Java,Arrays,Sockets,Byte,我试图在客户机-服务器体系结构中使用套接字发送一个简单的字节数组。使用Netbeans进行调试时也存在问题,因为它提供: SocketException:连接重置 所以我在下面贴了我的代码,如果有人帮助我,我真的很想 客户: public class TestClient { /** * @param args the command line arguments */ public static void main(String[] args) { try { S

我试图在客户机-服务器体系结构中使用套接字发送一个简单的字节数组。使用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,但行为是相同的

运行上述代码的结果是:

[B@25154f

感谢您的关注。

这是因为在您的情况下,
String.valueOf
将对象作为输入(并将其视为对象)


如果您确定收到一个字符串,您可以调用
newstring(b)
,或
newstring(b,“UTF-8”)

这是因为在您的情况下
String.valueOf
将对象作为输入(并将其视为对象)

如果您确定收到字符串,可以调用
新字符串(b)
,或
新字符串(b,“UTF-8”)

尝试替换此字符串

System.out.println(String.valueOf(b));
为此:

System.out.println(new String(b));
这将使用
默认编码
将字节数组转换为
字符串
。如果服务器和客户端都使用相同的
默认编码
,则它将起作用,否则您需要在两侧指定编码,如下所示:

TestClient
“Hello.getBytes(编码)

TestServer
System.out.println(新字符串(b,编码))
尝试替换此字符串

System.out.println(String.valueOf(b));
为此:

System.out.println(new String(b));
这将使用
默认编码
将字节数组转换为
字符串
。如果服务器和客户端都使用相同的
默认编码
,则它将起作用,否则您需要在两侧指定编码,如下所示:

TestClient
“Hello.getBytes(编码)


TestServer
System.out.println(新字符串(b,编码))

中,现在结果是[72101108108111]。它是“Hello”的正确表示形式(以字节为单位)。从这里,我如何才能将“Hello”作为字符串返回?谢谢(@NicolasFilotto给了我使用字符串构造函数的方法)再次感谢。现在结果是[72101108108111]。它是“Hello”的正确表示形式(以字节为单位)。从这里,我如何才能将“Hello”作为字符串返回?谢谢(@NicolasFilotto给了我使用字符串构造函数的方法)再次感谢。