Java从套接字获取ObjectInputStream ObjectOutputStream
我有一个基于服务器-多客户端交互的应用程序。这是我在server类中用于创建一个新线程的线程,我在其中接受所有新套接字:Java从套接字获取ObjectInputStream ObjectOutputStream,java,sockets,objectinputstream,objectoutputstream,Java,Sockets,Objectinputstream,Objectoutputstream,我有一个基于服务器-多客户端交互的应用程序。这是我在server类中用于创建一个新线程的线程,我在其中接受所有新套接字: Thread acceptingThread = new Thread(new Runnable() { @Override public void run() { while (true) { try { Socket s = serve
Thread acceptingThread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Socket s = serverSocket.accept();
listaSocket.add(s);
listaOis.add(new ObjectInputStream(s.getInputStream()));
listaOos.add(new ObjectOutputStream(s.getOutputStream()));
System.out.println("Client connected");
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
acceptingThread.start();
private ServerSocket serverSocket;
private ArrayList<Socket> listaSocket;
private ArrayList<ObjectInputStream> listaOis;
private ArrayList<ObjectOutputStream> listaOos;
您的代码在此特定行中被阻塞:
listaOis.add(new ObjectInputStream(s.getInputStream()));
注意这个ObjectInputStream
构造函数的行为。从:
创建从指定的InputStream读取的ObjectInputStream。从流中读取序列化流头并进行验证此构造函数将阻塞,直到相应的ObjectOutputStream写入并刷新标头。
从传入连接获取InputStream
,意味着需要通过连接发送序列化数据。这意味着您必须在构造函数继续之前执行以下操作:
socket.accept()
OutputStream
ObjectOutputStream
包装OutputStream
ObjectOutputStream
发送一些数据(即,将一些可序列化的数据写入其中并刷新)您的代码在此特定行中被阻塞:
listaOis.add(new ObjectInputStream(s.getInputStream()));
注意这个ObjectInputStream
构造函数的行为。从:
创建从指定的InputStream读取的ObjectInputStream。从流中读取序列化流头并进行验证此构造函数将阻塞,直到相应的ObjectOutputStream写入并刷新标头。
从传入连接获取InputStream
,意味着需要通过连接发送序列化数据。这意味着您必须在构造函数继续之前执行以下操作:
socket.accept()
OutputStream
ObjectOutputStream
包装OutputStream
ObjectOutputStream
发送一些数据(即,将一些可序列化的数据写入其中并刷新)阅读ObjectInputStream构造函数的javadoc。我认为serverSocket.accept()正在阻止程序,它会等待新的请求。在我的客户端中,我正在创建一个连接到此服务器的套接字。在s中,我从客户端获取套接字。ObjectInputStream在其构造函数中获取一个InputStream。我从s.getInputStream()获得该结果阅读ObjectInputStream构造函数的javadoc。我认为serverSocket.accept()正在阻止程序,它会等待新的请求。在我的客户端中,我正在创建一个连接到此服务器的套接字。在s中,我从客户端获取套接字。ObjectInputStream在其构造函数中获取一个InputStream。我从s.getInputStream()获得该结果