当前位置: 技术问答>java相关
向大家请教2个问题
来源: 互联网 发布时间:2015-07-26
本文导语: 一个是socket编程: server端: ServerSocket ss=ServerSocket(8000); Socket socket = ss.accept(); ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() ); ObjectOutputStream oos = new ObjectOutputStream( socket.getOutp...
一个是socket编程:
server端:
ServerSocket ss=ServerSocket(8000);
Socket socket = ss.accept();
ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() );
ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() );
client端:
socket = new Socket("localhost",8000);
oos = new ObjectOutputStream( socket.getOutputStream() );
ois = new ObjectInputStream( socket.getInputStream() );
这样通讯是没有问题的,可是我把client改成:
socket = new Socket("localhost",8000);
ois = new ObjectInputStream( socket.getInputStream() );
oos = new ObjectOutputStream( socket.getOutputStream() );
就出问题了。
我感觉是发生了死锁,就象C中建立SOCKET后,客户和服务器都在读,等待对方输入一样。
请问,JAVA高手,对流熟悉的高手帮助解答。
第二个问题是:
我做了一个BMP的ENTITY BEAN,APP SERVER是WEBLOGC7。在执行SQL语句的时候总是告诉我指定的table没有找到,可是table明明是存在的,而且还有数据的。困惑中。。。。。
另外通过JNDI访问数据源应该是找到了,不然应该早就报错了。所以是不是数据有什么特殊要求呀??
help!
server端:
ServerSocket ss=ServerSocket(8000);
Socket socket = ss.accept();
ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() );
ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() );
client端:
socket = new Socket("localhost",8000);
oos = new ObjectOutputStream( socket.getOutputStream() );
ois = new ObjectInputStream( socket.getInputStream() );
这样通讯是没有问题的,可是我把client改成:
socket = new Socket("localhost",8000);
ois = new ObjectInputStream( socket.getInputStream() );
oos = new ObjectOutputStream( socket.getOutputStream() );
就出问题了。
我感觉是发生了死锁,就象C中建立SOCKET后,客户和服务器都在读,等待对方输入一样。
请问,JAVA高手,对流熟悉的高手帮助解答。
第二个问题是:
我做了一个BMP的ENTITY BEAN,APP SERVER是WEBLOGC7。在执行SQL语句的时候总是告诉我指定的table没有找到,可是table明明是存在的,而且还有数据的。困惑中。。。。。
另外通过JNDI访问数据源应该是找到了,不然应该早就报错了。所以是不是数据有什么特殊要求呀??
help!
|
第一个问题:
问题出在 ObjectInputStream 上:他的构造函数要读取一个 header,使用InputStream 则没有问题.
ObjectInputStream
public ObjectInputStream(InputStream in)
throws IOExceptionCreates an ObjectInputStream that reads from the specified InputStream. 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.
...........
问题出在 ObjectInputStream 上:他的构造函数要读取一个 header,使用InputStream 则没有问题.
ObjectInputStream
public ObjectInputStream(InputStream in)
throws IOExceptionCreates an ObjectInputStream that reads from the specified InputStream. 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.
...........
|
哈哈!
终于找到问题所在了!原来是由于datainputstream的构造函数引起的!
由于这个构造函数要读取一些输入流的信息,所以当两边(SERVER和CLIENT)都在等待读取的时候就会使程序死锁!
相应的构造一个dataoutputstream的时候,它也会自动写出头信息,所以在CLIENT先构造一个dataoutputstream程序就可以运行了!
概括来讲就是由于构造datainputstream时使用了,inputstream得READ()方法,使程序死锁了,当然这是JDK设计的思路,我们没有好办法改变,只能在程序中控制了!呵呵!
至于你的第二个问题,我实在爱莫能助,而且你的信息给的也不够!呵呵!
终于找到问题所在了!原来是由于datainputstream的构造函数引起的!
由于这个构造函数要读取一些输入流的信息,所以当两边(SERVER和CLIENT)都在等待读取的时候就会使程序死锁!
相应的构造一个dataoutputstream的时候,它也会自动写出头信息,所以在CLIENT先构造一个dataoutputstream程序就可以运行了!
概括来讲就是由于构造datainputstream时使用了,inputstream得READ()方法,使程序死锁了,当然这是JDK设计的思路,我们没有好办法改变,只能在程序中控制了!呵呵!
至于你的第二个问题,我实在爱莫能助,而且你的信息给的也不够!呵呵!