我在客户端建立一个BOOK类,里面有查询图书的方法query(),调用一次程序能正常执行,但调用第二次时就执行不了。弄了好半天也没解决。 客户端与服务器的连接是在主程序中写的,之后将ObjectInputStream 对象传到CBook类中,共其查询方法query()使用.
客户端代码如下:
public class CBook() implements Serializable{
public static void main(String args[]){
    try{
 Socket socket = new Socket("127.0.0.1",5000);//与服务器建立连接
ObjectInputStream ins = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream outs = new ObjectOutputStream(socket.getOutputStream());

CBook book = new CBook(ins,outs);
book.setBookId("TS00001");
CBook [] bookResult = book.query();//第一次查询,可正常执行
System.out.println(bookResult[0].getBookName());
 book.setBookId("TS00002");
bookResult = book.query(); //再查询一次,执行不了了
System.out.println(bookResult[0].getBookName());
System.out.println("over...");
}catch(Exception e){...}
}
public CBook[] query(){
try{
strNotice = new String[2];
strNotice[0] = "queryBook";
strNotice[1]= "2";
bag = new String[6];
// socket = new Socket("127.0.0.1",5000);//如果与服务器的连接放在这,即取消注释,则程
// in = new ObjectInputStream(socket.getInputStream());//序可执行多次查询,正常
// out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(strNotice);
out.flush();
bag[0] = bookId;
bag[1] = bookName ;
       out.writeObject(bag);
out.flush();
System.out.println("\nmy 1\n");
int flag = in.readInt(); // 执行第二次查询时,在此停住了
        System.out.println("\nmy 2\n");
服务器端:
public  Server()
{
try{
serve=new ServerSocket(5000);//启动服务器访问端口
while(true)
{
client=serve.accept();//接收要访问的客户端的客户套接字
if(client!=null)//接收到客户端,启动服务进程,多线程
 {
  ServerThread serveThread=new ServerThread(client);
  serveThread.start();//启动线程,执行run函数
 }
}
   
   }catch(Exception exp)
{...}
 }
public ServerThread(Socket client)
{
try{
con=new Conn();//建立一个新的数据库连接类
state=con.getStatement();//获得连接状态
         clientSocket=client;
databaseWriter=new ObjectOutputStream(clientSocket.getOutputStream());
databaseReader=new ObjectInputStream(clientSocket.getInputStream());
}catch(Exception exp){...}
}public void run() // 执行第二次查询时,没有进入这个函数.
{
  try{
   System.out.println("\nserver my 2\n");// 执行第二次查询时,
    buf=(String[])databaseReader.readObject();//获得输入标识以及大小
 ....
}
请问怎样解决 第二次查询顺利执行?? 我是要保证客户端与服务器进行交互时,对一个客户开启一个线程,而不是一个查询开启一个线程.谢谢!!