看看是不是放到了while里面!

解决方案 »

  1.   

    我写了一个应用程序,它在执行serversocket.accept()时,想中断程序的
    执行,点关闭按钮,可是不起作用,应该是因为accept()一直在运行的原因,
    请问有什么方法可以让程序可以关闭?
    谢谢
      

  2.   

    求用serversocket.accept()时CPU占用100%的解决方案
    这个线程会一直等到有人和他通信为止,只是挂起。不会占100%的。
    一定是程序问题。
    铁代码看看
      

  3.   

    楼主有必要先去了解一下网络编程尤其是socket编程基本知识了。
    你能让accept()占用100%的cpu?你真行!中断accpet()?先理解accept做了什么事情吧。
    你是想拒绝某个特定的连接?还是想停止整个服务?
      

  4.   

    UI我就不会了,但是原理应该是一样的。以下是一个常见的SocketServer的例程。
    留意一下那个stopListenimport java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;public class MySocketServer extends Thread {
        private ServerSocket serverSocket = null;
        private boolean listening = true;
        
        public MySocketServer(int port) {
         super();
         listening = true;     try {
                serverSocket = new ServerSocket(port);
            } catch (IOException e) {
                System.err.println("Could not listen on port: " + port);
                System.exit(-1);
            }
        }
        
        public void run(){
            while (listening)
    try {
    new EchoProcessThread(serverSocket.accept()).start();
    } catch (IOException e) {
    e.printStackTrace();
    }
        }
        
        public void stopListen () {
         listening = false;
         try {
    serverSocket.close();
    } catch (IOException e) {
    }
        }
        
        
    public static void main(String[] args) { int port = 1234;
    MySocketServer server = new MySocketServer(port);
    server.start();
    System.out.println("server start listen on " + port);

    try {
    //let main process sleep 1 minute, then stop listening server.
    System.out.println("server will stop in 1 minute!");
    Thread.sleep(60*1000L);
    server.stopListen();
    System.out.println("listening thread is torn down!");
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
            
        }
    }
    class EchoProcessThread extends Thread {
        private Socket socket = null;    public EchoProcessThread(Socket socket) {
         super("EchoProcessThread");
         this.socket = socket;
        }    public void run() {     try {
             DataOutputStream out = new DataOutputStream(socket.getOutputStream());
             DataInputStream in = new DataInputStream(socket.getInputStream());         int oneChar = -1;
             StringBuffer sb = new StringBuffer();
             
             while ( (oneChar = in.read()) != -1) {
              sb.append(oneChar);
             }
             System.out.println("content length " + sb.length());
             System.out.println("content " + sb.toString());
             out.writeBytes(sb.toString());
             System.out.println("write back data");
             
             out.close();
             in.close();
             socket.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
        }
    }