我在客户端建立一个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();//获得输入标识以及大小
....
}
请问怎样解决 第二次查询顺利执行?? 我是要保证客户端与服务器进行交互时,对一个客户开启一个线程,而不是一个查询开启一个线程.谢谢!!
客户端代码如下:
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();//获得输入标识以及大小
....
}
请问怎样解决 第二次查询顺利执行?? 我是要保证客户端与服务器进行交互时,对一个客户开启一个线程,而不是一个查询开启一个线程.谢谢!!
解决方案 »
- 排序方法,有空的来讨论一下下?
- 帮我看看这段代码的意思
- 数据类型问题求解~
- 我的java程序打成jar包后 在liunx后台运行,有时候无缘无故就自动结束了, log4j里面也没异常日志
- 网络硬盘中的问题,帮帮忙啊兄弟们(不好意思,暂时没分了)
- Java怎么解压带固定密码的ZIP文件(急用,给高分)
- 请问各位有没有关于HTTPS的资料。100分献上
- 请问:jb+acess怎么实现数学上的角度的角、分、秒的录入和计算啊?
- 请问如何接收在屏幕上输入的数字和字符串?
- ★★★如何创建包?★★★ ★★★如何创建包?★★★
- 关于ArrayList类的IndexOf方法的实质!
- 求关于GIF的资料和JAVA的GIF解码器?
{
try{
System.out.println("\nserver my 2\n");// 执行第二次查询时,
buf=(String[])databaseReader.readObject();//获得输入标识以及大小
....
} 这个方法应该是一个 循环机制