如何从外部终止一个socket服务

veardn 2010-08-19 10:45:11
socket很简单,

大致上是
class socket1{
...
public void startServer() {
try{
server = new ServerSocket(port);
while(true){
socket = server.accept();
....
}
}
}

public static void main(){
socket1 s = new socket1();
s.startserver();
//??如何终止s??想控制这个socket安全结束,怎么做?最好像是结束这个进程那样
}
}

...全文
106 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
veardn 2010-08-19
  • 打赏
  • 举报
回复
我搜了下,停thread好像也是不安全的,比较安全的做法是让run方法执行完。

但如果

public void run(){
while(condition){socket = xx.accept();....
}
}

我怎么保证一定跳出这个while,如果没有客户端请求,是不是就不走到while()里了?

关于2楼的方法不懂,我现在用Timer,设个时间。到时间了就关掉socket。问题是我不知道怎么关socket
michaellufhl 2010-08-19
  • 打赏
  • 举报
回复
同意。
其实就是停thread的方式。
  • 打赏
  • 举报
回复
默认情况下,Tomcat 启用 8005 监听端口,当在 8005 上接收到 SHUTDOWN 字符串时就开始进行关闭工作。
  • 打赏
  • 举报
回复
可以仿照 Tomcat 的关闭机制。

再创建一个 Socket 的监听端口,用于监听关闭指令,当在这个端口上收到关闭指令时,就先拒绝新的连接,将已经在处理的连接完成后将整个服务关闭。
szaiguoguo 2010-08-19
  • 打赏
  • 举报
回复
如果在同个程序中,可以把

server = new ServerSocket(port);
while(true){
socket = server.accept();
放在一个线程里,停掉这个线程就行了


如果想在客户端停它,可以让客户端发一串特定的字符串,比如“stop”,当server接收到这串字符就退出break出循环
clinique 2010-08-19
  • 打赏
  • 举报
回复
这样的操作本来就是不安全的。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧