看看是不是放到了while里面!
解决方案 »
- 关于字符串相加慢问题(非变量)
- jbpm
- Eclipse 如何debug J2EE 项目
- AXIS2出现The server did not recognise the action which it received问题
- JDBC异常的疑问 急! 急!! 急!!!
- 关于struts的问题
- hibernate 3.0 + struts1.2 + myclipse 怎么配置数据源
- HTML5和webservice的结合
- 有用过swt的同仁吗?大家一起发掘发掘好处
- http://localhost:端口 这样居然可以访问项目?
- 先到先得 100分,谁有JBossOpenTool.jar 给俺一份!
- 菜鸟问题:怎样配置Tomcat5的工作目录?
执行,点关闭按钮,可是不起作用,应该是因为accept()一直在运行的原因,
请问有什么方法可以让程序可以关闭?
谢谢
这个线程会一直等到有人和他通信为止,只是挂起。不会占100%的。
一定是程序问题。
铁代码看看
你能让accept()占用100%的cpu?你真行!中断accpet()?先理解accept做了什么事情吧。
你是想拒绝某个特定的连接?还是想停止整个服务?
留意一下那个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();
}
}
}