Abh*_*hek 8 java sockets objectinputstream
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
和客户
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
连接已成功建立,但在服务器代码行中
ins=new ObjectInputStream(cli.getInputStream());
Run Code Online (Sandbox Code Playgroud)
代码停止并且不继续,可能是什么问题?
Mar*_*eel 30
您需要在连接的两侧创建ObjectOutputStream之前ObjectInputStream(!).当ObjectInputStream被创建,它会尝试读取来自该对象流报头InputStream.因此,如果ObjectOutputStream尚未创建另一侧,则没有要读取的对象流标头,并且它将无限期地阻塞.
或者用不同的方式表达:如果双方首先构造ObjectInputStream,两者都会阻止尝试读取对象流标题,直到ObjectOutputStream创建之后才会写入(在行的另一侧); 这将永远不会发生,因为双方都被阻止在构造函数中ObjectInputStream.
这可以从Javadoc推断ObjectInputStream(InputStream in):
从流中读取序列化流头并进行验证.此构造函数将阻塞,直到相应的ObjectOutputStream已写入并刷新标头.
这也在Esmond Pitt的Java基础网络部分3.6.2中描述.
| 归档时间: |
|
| 查看次数: |
6946 次 |
| 最近记录: |