我正在尝试通过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/