WEB项目:我用一个SERVLET去跑SOCKET监听服务.但是每次跑到这里就会发现WEB项目 无法继续加载了! 网页就不能访问,当时SOCKET服务是正常工作的.
这里PO下我的监听服务:public class Listenserve  {
private ServerSocket ss;
private boolean listening = true;
public static List<Socket> client_file_sockets = new ArrayList<Socket>(); public Listenserve() {
Init();// 初始化
//listn();// 启动监听
} public void Init() {
try {
ss = new ServerSocket(2332, 1);
System.out.println("在2332端口监听");
} catch (IOException ie) {
System.out.println("无法在2332端口监听");
ie.printStackTrace();
}
} public void listn() {
try {
while (listening){
System.out.println("!!!!!!!!!!!!!!!!!!!!!!");
if(ss.accept()!=null){
//new Thread(new Dialogserve(ss.accept())).start();
System.out.println("******************");
}
}

} catch (IOException ie) {
ie.printStackTrace();
}
}
请各位大大 指点下~小弟刚学网络编程~~

解决方案 »

  1.   

    new Thread(new Dialogserve(ss.accept())).start();
    注释掉,项目才能启动完成
      

  2.   

    应该因为他进入listn()这个方法死循环在里面了,不能往下执行了。所以就不能加载web项目了。建议socket监听用线程的方式启动。或者单独启动一个线程去跑这个监听。
      

  3.   


    这个就是用现成的方式去启动。 可以这样做,但是不建议在tomcat里启动一个线程。建议单独启动一个线程。
      

  4.   

    package com.liusoft.dlog4j.test;import java.io.*;
    import java.lang.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.ArrayList;
    import java.util.List;public class Listenserve  implements Runnable {
    private ServerSocket ss;
    private boolean listening = true;
    public static List<Socket> client_file_sockets = new ArrayList<Socket>(); public Listenserve() {
    Init();// 初始化
    run();// 启动监听
    } public void Init() {
    try {
    ss = new ServerSocket(2332, 1);
    System.out.println("在2332端口监听");
    } catch (IOException ie) {
    System.out.println("无法在2332端口监听");
    ie.printStackTrace();
    }
    } public void run() {
    try {
    while (listening){
    System.out.println("!!!!!!!!!!!!!!!!!!!!!!");
    if(ss.accept()!=null){
    new Thread(new Dialogserve(ss.accept())).start();
    System.out.println("******************");
    }
    }

    } catch (IOException ie) {
    ie.printStackTrace();
    }
    }
    }我改成这样 可以吗?
      

  5.   

    不是很理解 这句话是什么意思  我现在就是需要TOMCAT启动的时候启动SOCKET服务
      

  6.   

    解决是解决,弄了TCPSERVERLET 就是跑一个 SOCKET监听服务的线程!不知道以后性能会咋样!
      

  7.   

    我很无语
     while (listening){
                    System.out.println("!!!!!!!!!!!!!!!!!!!!!!");
                    if(ss.accept()!=null){
                        new Thread(new Dialogserve(ss.accept())).start();
                        System.out.println("******************");
                    }
                }什么写法。这种写法无论放在哪里都是错的
    ss.accept()一旦调用,直接进入堵塞。
    如果有Socket request,返回一个Socket。但是,在if里又出现了ss.accept()!!!!!!也就是说,第一个Socket直接被忽略了。
      

  8.   

    我建议你把整个ServerSocket的监听放一个线程。
    每次收到Socket,再起一个线程。否则你Tomcat肯定启动不了了