我遇到一个奇怪的问题,在线程里开socket server在accept之后就立刻退出了!没有异常我的代码如下:class ThreadUseRunnable implements Runnable { 
ThreadUseRunnable(){}// 构造函数
public void run() { 
try {
server = new ServerSocket(port);
BufferedReader in;
PrintWriter out;
while (status == 1){
socket = server.accept();
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(),true);

String line = in.readLine();
out.println("you input is :" + line);
out.close();
in.close();
socket.close();
} }catch (SocketException e) {
logger.error("端口" + port + "可能已被占用!" + e.getMessage());

catch (Exception e) {
e.printStackTrace();
return; 

}
}开线程的代码:
Thread th = new Thread(new ThreadUseRunnable());
th.start();难道是不允许在线程中开server socket吗?

解决方案 »

  1.   

    server = new ServerSocket(port); 你的每个线程都使用同一个端口,除了第一个,其它的你说能开吗??
      

  2.   

    用一个socket,然后用线程去处理不同的连接~
      

  3.   

    问题是我第一个端口都开不了啊而且我运行start()只一次,没道理会第一次也不成功啊现象是运行到accept直接退出,我声名的端口也没有被占用
      

  4.   


    由于我的需求是要通过别的程序来控制这个socket server 的启动与停止,所以我想把server放在一个线程中监听
      

  5.   

    首先可以肯定的是 在线程里面是可以开socket 的你的线程在accept后退出是因为你启动线程的进程已经退出了!
    你可以这样用
    Thread th = new Thread(new ThreadUseRunnable()); 
    th.start(); 
    Thread.currentThread().sleep(10000);然后看看效果 你应该就明白了注意区分守护线程和非守护线程
      

  6.   

    果然如 sun_cat 所说,我是用JUnit测试的,testCase结束后就退出了,原因就在这里。非常感谢 !