java - 在真实循环中通过网络发送对象时出错

标签 java networking

我正在尝试通过java中的网络发送任意数量的对象。问题是它仅发送一个对象,然后在尝试发送更多对象时引发错误,原因是我不知道为什么。

服务器主要代码:

public static void main(String[] args) throws IOException, ClassNotFoundException{
        System.out.println("Waiting for players to connect");
        int port = 4444;
        ServerSocket serverSocket = new ServerSocket(port);
        Socket clientSocket = serverSocket.accept();
        System.out.println("Player connected");
        Package testPackage;
        SendPackage sendPackage;
        for(int i=0;i<1000;i++){
            testPackage = new Package(new Order(i,i),null,false);
            sendPackage = new SendPackage(testPackage,clientSocket);
        }
    }


SendPackage类:

import java.io.*;
import java.net.*;

public class SendPackage{

    public SendPackage(Package pck, Socket receiver) throws IOException {
        ObjectOutputStream send = new ObjectOutputStream(receiver.getOutputStream());
        send.writeObject(pck);
        send.flush();
        send.close();
    }
}


RecievePackage类:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;


public class ReceivePackage extends Thread {
    Socket sender;
    ObjectInputStream receive;

    public ReceivePackage(Socket sender) throws ClassNotFoundException, IOException{
        this.sender=sender;
    }

    public void run(){
        try {
            while(true)
                listen();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    protected void listen() throws IOException, ClassNotFoundException {
        receive = new ObjectInputStream(sender.getInputStream());
        Package pck = (Package) receive.readObject();
        System.out.println(pck.order.quantity);
    }
}


客户主班:

public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException{
        Socket clientSocket = new Socket("192.168.0.7", 4444);
        System.out.println("Connected");
        receivePackage = new ReceivePackage(clientSocket);
        receivePackage.start();
    }


给我以下错误:

Connected
0
java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at ReceivePackage.listen(ReceivePackage.java:42)
    at ReceivePackage.run(ReceivePackage.java:31)


我正在尝试发送1000个对象,但是只能成功发送一个。如何解决呢?

最佳答案

receive = new ObjectInputStream(sender.getInputStream());


您正在尝试在while(true)循环中永久读取流。有时候可能没有什么可阅读的,所以您得到了End Of File Exception

关于java - 在真实循环中通过网络发送对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16276565/

相关文章:

java - 是否可以在 J2ME 中使用 webservice 发布字节数组数据?

java - 系统无法扩展以支持并发用户

android - 如何在 PendingIntent 不再可用时正确调用 releaseNetworkRequest(PendingIntent)

java - 如何从 Java 类调用 SOAP Web 服务?

Java JDT 解析器。获取VariableDeclarationFragment的变量类型

java - Android GraphView setGridStyle() 方法未找到

javascript - 如果将 JavaScript 函数分配给工作链接,该函数会首先执行吗?

c# - TCP套接字测试

networking - Docker-Rhel 7上的覆盖网络

python - 如何使 `requests` 使用与 DNS 解析不同的主机名进行 TLS 验证?