Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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.io.StreamCorruptedException:无效的流头:54657374_Java - Fatal编程技术网

java.io.StreamCorruptedException:无效的流头:54657374

java.io.StreamCorruptedException:无效的流头:54657374,java,Java,我正在尝试读取使用套接字程序从客户端发送的字符串,代码如下: import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.ClassNotFoundException; import java.net.ServerSocket; import java.net.Socket; public class SocketServerE

我正在尝试读取使用套接字程序从客户端发送的字符串,代码如下:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServerExample {

    //static ServerSocket variable
    private static ServerSocket server;
    //socket server port on which it will listen
    private static int port = 5000;

    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //create the socket server object
        server = new ServerSocket(port);
        //keep listens indefinitely until receives 'exit' call or program terminates
        while(true){
            System.out.println("Waiting for client request");
            //creating socket and waiting for client connection
            Socket socket = server.accept();
            //read from socket to ObjectInputStream object
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //convert ObjectInputStream object to String
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //create ObjectOutputStream object
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //write object to Socket
            oos.writeObject("Hi Client "+message);
            //close resources
            ois.close();
            oos.close();
            socket.close();
            //terminate the server if client sends exit request
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //close the ServerSocket object
        server.close();
    }

}
但在从客户端读取字符串时,我得到如下错误:

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 54657374
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:803)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
    at SocketServerExample.main(SocketServerExample.java:29)
线程“main”java.io.StreamCorruptedException中的异常:无效流头:54657374 位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:803) 位于java.io.ObjectInputStream。(ObjectInputStream.java:298) 位于SocketServerExample.main(SocketServerExample.java:29)
我搜索了一下,没能找到这个bug。请帮助我。

您不能指望
ObjectInputStream
自动将文本转换为对象。十六进制的
54657374
“Test”
文本。您必须以字节的形式直接发送数据。

显然,您并不是使用
ObjectOutputStream:
发送数据,而是在写入字节

  • 如果使用
    readObject()
    读取,则必须使用
    writeObject()进行写入。
  • 如果使用
    readUTF()
    读取,则必须使用
    writeUTF()进行写入。
  • 如果使用
    readXXX()
    读取,则必须使用
    writeXXX(),
    写入XXX的大多数值

要在ObjectInputStream上读取,您必须写入ObjectOutputStream(或者您必须执行与它相同的操作,我不建议您尝试)。您不能只向任何流写入数据,然后假设它会工作。@SrujanBarai不,您不是。您正在直接发送
“Test”
,否则不会收到此错误。您好,我正在将字节直接从我的cpp客户端发送到java服务器。在这种情况下如何阅读?iResult=send(ConnectSocket,sendbuf,(int)strlen(sendbuf),0);--用于发送的cpp客户端代码。@Haramoz您还应该发送长度,否则每个流只能发送一条消息。我将使用ByteBuffer和本机有序数据阻塞NIO。