程序的控制台有提示内容吗?   最大的可能是与数据库打交道时出现的问题,检查是否每次都关闭了statement和resultset,一个connect最多支持300个statement.  肯定是逻辑上的错误.

解决方案 »

  1.   

    谢谢楼上各位,能说清楚一些吗? 昨天以前是不是8天才停了一次,现在是一天就停了两次,是什么原因呢? 我的程序大概是这样的: 接收到信息时,按照信息来查询数据库,然后向客户端返回查询到的信息,
    CoolAbu(阿卜-Never Stop(★★★★)) ,再把逻辑看看是什么意思呀?在本机用了一个测试用的客户端来连接,但没反应maobing(流浪了一年):能说清楚一些吗?谢谢你了!napoleonz(愣头青):控制台没有内容,我用了一个测试的客户端,运行时收不到反回信息程序片断:public class listenSocket
        implements Runnable {
      Socket socket1;  String reply = "";  public listenSocket() {
        super();
      }  listenSocket(Socket socket) {
        this.socket1 = socket;
      }  public void run() {    try {
          InputStream is = socket1.getInputStream();
          InputStreamReader isr = new InputStreamReader(is);
          BufferedReader br = new BufferedReader(isr);
          char c[] = new char[136]; //receive jy data
          while (c1 < 136) { //js_jyxx
          c[c1] = (char) br.read();
          c1++;        }
          cljy(receive);
          OutputStream os = socket1.getOutputStream();
          OutputStreamWriter osr = new OutputStreamWriter(os);
          BufferedWriter bw = new BufferedWriter(osr);
          System.out.println("reply="+reply)
          bw.write(reply);
          bw.flush();
          os.close();
        }
        catch (Exception e) {
          System.err.println("error:" + e.getMessage());
          outnet.writelog("error | listenSocket.java  |"+e.getMessage()  +"| ");    }
    }
        public void cljy(String received) {    Statement statement;
        try {
                   String query_String = "select ***";
                Connection con_js = SocketServer.con;
                statement = con_js.createStatement();
                ResultSet resultset = null;
                System.out.println("query_String=" + query_String);//***
                resultset = statement_js.executeQuery(query_String);
                reply = "***"
                }
                }
    出错的时候,能打印出"query_String=***,但后面就开始不动了,正常的话应该后面应该打印出"reply="+reply的,这时对其它的请求也不再响应发送的数据包本身好象又没有问题,因为我重新运行程序后,再发一次出错时的数据包,又可以正常处理了public class SocketServer {
      
      public SocketServer() {
        super();
      }  public static void main(String args[]) {
        try {
                ServerSocket s = new ServerSocket(ServerPort);      System.out.println("listening...");
          while (true) {
            Socket socket = s.accept();
            listenSocket server = new listenSocket(socket);
            Thread thread = new Thread(server);
            thread.start();
          }
        }
        catch (Exception ex) {
          ex.printStackTrace();
          outnet.writelog("error | SocketServer.java  |"+ex.getMessage()  +"| ");    }  }
    }程序由于我删除了一些东西,可能语法上会有问题,但事实上是没事的
      

  2.   

    napoleonz(愣头青),statement我关掉了,resultset好象没关,不是statement关了就可以了吗? 如果statement没关的话,是有出错提示的,就是提示超过最大的光标数之类的提示,而且,在死掉前处理的业务已经远远超过了300了
      

  3.   

    看了一下阻塞的问题,如果说某个socket连接,假定名为A,在得到它的值后,进行处理,然后返回给客户端,如果单独是这个A出了问题,不能返回数据给客户端,这还可以理解,但是现在的问题是socket服务器不能再处理新的连接了,郁闷!
      

  4.   

    在连接处理程序中是否还有新的Socket呢?
      

  5.   

    想了想,由于你的客户端是C的。是否可能出现类似下面的错误呢?如果不是千万不要骂我。
    Server.javaimport java.io.*;
    import java.net.*;class T extends Thread{
    Socket s;
    public T(Socket s){
    this.s = s;
    }
    public void run(){
    try{
    InputStream in =s.getInputStream();
    OutputStream out = s.getOutputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    System.out.println(br.read());
    System.out.println(br.read());
    }catch(Exception e){
    System.out.print(e);
    }
    }
    }public class Server
    {
    public static void main(String [] args){
    ServerSocket server = null;
    Socket s = null;
    int i = 0;
    try{
    server = new ServerSocket(12600,10);
    while(true){
    try{
    s = server.accept();
    new T(s).start();
    System.out.println(i++);
    }catch(Exception e){
    System.out.print(e);
    }
    }
    }catch(Exception e){
    System.out.print(e);
    }
    }
    }Client.javaimport java.io.*;
    import java.net.*;public class Client
    {
    public static void main(String [] args){
    Socket socket = null;
    try{
    socket = new Socket("127.0.0.1",12600);
    InputStream in = socket.getInputStream();
    OutputStream out = socket.getOutputStream();
    out.write(54);
    }catch(Exception e){
    System.out.print(e);
    }
    }
    }
      

  6.   

    如果正在尝试着从客户端读数据时,客户端无端地关闭了,应该会出现上面的现象。
    System.out.println(br.read());//比方说,你认为到这里客户端的输入还没有结束,所以继续读入,但事实上客户端不再发送了。
    System.out.println(br.read());
      

  7.   

    一个朋友说不要一直用一个数据库连接,因为一个连接长时间存在会有问题,建议在每次有交易时都打开一个数据库链接,用完后关闭,但我今天发现有点问题:
    运行时如果客户端一次发送一个交易,交易结束后再发下一个,就没有问题,但同时发送两个交易时就不行了,(即在两个线程中同时打开数据库链接),会出错,提示jdbc或oracle的某些东西已经load,奇怪的是这些错误捕捉不到,只是在运行时才打印出一大串的错误.谁知道怎么解决呢?
      

  8.   

    建议catch{}
    后面加上finally{}块
    将IO,Socket和Connect,Statement Result等占用资源,又不能自己回收的对象关闭,并=null
    这样如果出现异常,可以在finally中释放资源!
      

  9.   

    对Socket加上一个Timeout时间参数,阻塞timeout时间后,就让read方法返回!