gpt4 book ai didi

java - 新的 ObjectInputStream() block

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:27:38 25 4
gpt4 key购买 nike

public class SerProg {


static ServerSocket ser=null;
static Socket cli=null;
static ObjectInputStream ins=null;
static ObjectOutputStream outs=null;


public static void main(String[] args) {

try {

ser=new ServerSocket(9000,10);
cli=ser.accept();

System.out.println("Connected to :"+cli.getInetAddress().getHostAddress()+" At Port :"+cli.getLocalPort());

ins=new ObjectInputStream(cli.getInputStream());
outs=new ObjectOutputStream(cli.getOutputStream());

String str=(String)ins.readObject();


} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}

}

和客户

public class SerProg {

/**
* @param args
*/
static ServerSocket ser=null;
static Socket cli=null;
static ObjectInputStream ins=null;
static ObjectOutputStream outs=null;


public static void main(String[] args) {
// TODO Auto-generated method stub

try {

ser=new ServerSocket(9000,10);
cli=ser.accept();

System.out.println("Connected to :"+cli.getInetAddress().getHostAddress()+" At Port :"+cli.getLocalPort());

ins=new ObjectInputStream(cli.getInputStream());
outs=new ObjectOutputStream(cli.getOutputStream());

String str=(String)ins.readObject();


} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}

}

连接建立成功但是在服务器代码行

ins=new ObjectInputStream(cli.getInputStream());

代码停止不继续,可能是什么问题??

最佳答案

您需要在连接两侧的 ObjectInputStream 之前创建 ObjectOutputStream(!)。创建 ObjectInputStream 时,它会尝试从 InputStream 中读取对象流 header 。因此,如果另一端的 ObjectOutputStream 还没有创建,还没有对象流头可以读取,它将无限期地阻塞。

换句话说:如果双方都先构造ObjectInputStream,双方都会阻止尝试读取对象流头,直到ObjectOutputStream有已创建(在线的另一侧);这永远不会发生,因为双方都在 ObjectInputStream 的构造函数中被阻塞。

这可以从 ObjectInputStream(InputStream in) 的 Javadoc 中推断出来:

A serialization stream header is read from the stream and verified. This constructor will block until the corresponding ObjectOutputStream has written and flushed the header.

Esmond Pitt 在 Fundamental networking in Java 的第 3.6.2 节中也对此进行了描述。

关于java - 新的 ObjectInputStream() block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14110986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com