当前位置: 首页 > 知识库问答 >
问题:

无法将数据从php socket客户端发布到java socket服务器

方季同
2023-03-14

我正在使用php编写一个socket客户端,我想向java实现的socket服务器发送一条字符串消息,但是我试图从php socket客户端发送数据,java socket服务器会因java崩溃。io。StreamCorruptedException异常。下面是我的PHP socket客户端、Java socket服务器的代码,以及我发布消息时引发的错误。

$fp = fsockopen("127.0.0.1", 1080, $errno, $errstr, 30);
        if (!$fp) {
            echo "$errstr ($errno)<br />\n";
        } else {
            $out = "hello";
            fwrite($fp, $out);
            while (!feof($fp)) {
                echo fgets($fp, 128);
            }
            fclose($fp);
        }

java代码

providerSocket=新的ServerSocket(1080,10);

        System.out.println("Waiting for connection");
        connection = providerSocket.accept();
        System.out.println("Connection received from " + connection.getInetAddress().getHostName());

        out = new ObjectOutputStream(connection.getOutputStream());
        out.flush();
        in = new ObjectInputStream(connection.getInputStream());
        sendMessage("Connection successful");


            try{
                message = (String)in.readObject();


                System.out.println("client>" + message);





            }
            catch(ClassNotFoundException classnot){
                System.err.println("Data received in unknown format");
            }

    }
    catch(IOException ioException){
        ioException.printStackTrace();
    }
    finally{
        //4: Closing connection
        try{
            in.close();
            out.close();
            providerSocket.close();
        }
        catch(IOException ioException){
            ioException.printStackTrace();
        }
    }

我犯的错误

    java.io.StreamCorruptedException: invalid stream header: 48656C6C
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at Provider.run(Provider.java:37)
    at Provider.main(Provider.java:109)
Exception in thread "main" java.lang.NullPointerException
    at Provider.run(Provider.java:85)
    at Provider.main(Provider.java:109)

共有3个答案

赵献
2023-03-14

一些意见/建议

>

  • 要从套接字中读取数据,您使用的是ObjectInputStream,它使用不同的协议来读取数据。换句话说,它假设正在读取的对象是一个java对象(对象输入流),在您的情况下是php对象。您正在传递一个字符串(一个php对象),该字符串最终转换为字节并通过线路发送。

    我建议您只使用连接。getOutputStream()并读取原始字节数组。然后使用这个字节数组创建一个字符串(使用接受字节数组的标准字符串构造函数)。

  • 司徒英卓
    2023-03-14

    事实上,您正在读取一个对象,但这仅在客户端通过out写入对象时才起作用。writeObject()。你最好这样写

    fwrite($fp, "Hello world!\n"); // note the newline at the end
    

    然后用BufferedReader读取该行。readLine()

    季俭
    2023-03-14

    您使用的InputStream不正确,因为您没有发送Java对象。如果要发送文本,请使用BufferedReader或其他方法。

    请参见Socket Java教程。

     类似资料:
    • 我有一个TCP服务器和一个客户端,简单的TCP服务器将接收传入的数据并打印出来,而客户端将继续创建一个套接字连接并循环发送数据到TCP服务器。 我得到的信息是,如果一个TCP连接被正确地关闭了,这个过程应该会继续下去,不会发生任何崩溃。 但在从客户端接收到一定数量的数据到服务器之后,客户端会崩溃,并出现错误 有没有什么办法可以避免这次撞车,让它持续运行呢?我是新来的所以如果我犯了什么愚蠢的错误,我

    • 我有点困惑AngularJS是如何将数据发布到我的WebAPI控制器的。通常,当我将数据从AngularJS发布到MVC控制器时,我会这样做: 但是,在WebAPI控制器中,字符串值总是返回为null。 在将数据传递到web api控制器时,是否需要以稍微不同的方式发布数据? 以下是我的控制器中的方法: 编辑不确定这是否有帮助,但这是小提琴手的标题: POSThttp://localhost:58

    • 我正在Unity中制作一个游戏,我试图将数据从客户端发送到服务器并返回到客户端(试图保存实例),但当我收到数据并尝试将数据发送回客户端时,它表示udp客户端未连接。 它成功地将数据从我的Unity客户端发送到服务器,但一旦它到达那里,套接字就会断开连接,我就无法返回任何内容。正如你所看到的,我试图设置一些多播选项,但它似乎不能正常工作。 客户: 服务器: 因此,服务器中UdpClient的实例会保

    • 我有一个关于Java插座的技术问题。 例如,假设我有一个Java Sockets服务器和n个多个客户端。是否可以几乎实时地将数据从服务器发送到任何或所有客户端? 更准确地说: 有哪种监听器可以在Sockets客户端中实现 有人能告诉我什么方法是最好的吗?此外,如果有人有一个代码示例,我也会很高兴。 谢谢

    • 从server-A(可通过静态IP全局访问)开始,我将UDP套接字绑定到0.0.0.0:25000。 然后,在(住宅)NAT 后面使用客户端 A,我将 UDP 套接字绑定到 0.0.0.0:25000。然后,客户端 A 将数据包发送到服务器 A。 服务器 A 接收数据包。服务器 A 记录远程套接字 K,数据包从中 NAT 开始。服务器 A 向 K 发送数据包,目的是 NAT 将数据包转发到客户端

    • 我正在创建我的产品,并与这个问题。有一天,我设置了Socket.io,一切都很好。第二天,我将服务器和客户端从http迁移到HTTPS。迁移后客户端和服务器端仍然连接,但不能从客户端发射到服务器,从服务器发射到客户端。 我的ssl证书位于和中,它们加载正确。运行在上的服务器 我的示例react组件。我的react应用程序运行在上。HTTPS连接良好,工作良好。 我该怎么办?也许我在中错误地使用了s