大神们怎么能让 serverSocket.accept()等待一段时间如果没人连接就退出啊
public List socketAccept(ServerSocket server){
try {
long time=System.currentTimeMillis();
while (System.currentTimeMillis()-time<2000) {//10毫秒后退出
Socket socket = server.accept();
sockets.add(socket);//得到socket连接数
}
} catch (IOException e) {
e.printStackTrace();
try {
server.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
return sockets;
}
如果没有连接Socket socket = server.accept();会一直在这等着,有什么办法跳出循环吗
在程序里实现了一个线程池,这个线程池构造时创建WorkThread(extends Thread),WorkThread负责从线程池里取Task,然后执行这个Task。
然后,我的监听器执行
代码
ServerSocket sc;
sc = new ServerSocket(5600);
while (true) {
//MDPBeanFactory.isReceiveFinished是获取一个开关变量,当receive接收完成时这个值返回true
if(MDPBeanFactory.isReceiveFinished()){
//pool是一个线程池管理对象,addTask是往线程池里增加一个线程
pool.addTask(new AnotherTask());
}else{
Socket socket = null;
socket = sc.accept();
pool.addTask(new ReceiveTask(socket));
}
}
当有Client通过Socket向Server发送数据时,监听器就会创建一个新ReceiveTask(implements Task)对象,并放到线程池里,WorkThread就会执行这个Task。Client发送完成之后,发送一个标识"finish",ReceiveTask收到后,会将Socket.Close();
ReceiveTask的执行代码:
代码
while (!socket.isClosed()) {
ObjectInputStream inStream = null;
try{
inStream = new ObjectInputStream(socket.getInputStream());
String temp = (String)inStream.readObject();
if (!temp.equals("finish")
System.out.println(temp);
else{
System.out.println(temp);
socket.close();
System.out.println(socket.isClosed());
//给一个状态开关设置为True,打算在监听器那里监听到为true就创建另一个Task
MDPBeanFactory.setReceiveFinished(true);
}
}catch(IOException e){
socket.close();
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。