如何关闭已经创建好的TCP Server

新靖界 2014-06-16 11:47:03
由于项目需要,我创建了一个TCP Server用来接收其他客户端的连接,并接收相应的数据。
项目需要根据指令进行相应的操作,如果我收到关闭TCP Server的指令,就要关闭当前的TCP Server。
我应该怎么关闭TCP Server呢?
下面是我创建TCP Server的代码。

/*
* 支持多客户端的服务器端实现
*/
public class MulThreadSocketServer {
public static ServerSocket serverSocket = null;//serverSocket
// public static Socket socket = null; //ServerSocket与Client通信的Socket

//定义保存所有连接Socket的ArrayList
public static ArrayList<Socket> socketList=new ArrayList<Socket>();
/*
* 创建TCP ServerSocket连接
*/
public ServerSocket creatServerSocket(int port){
ServerSocket serverSocket = null;
Socket socket = null;
// 监听端口
System.out.println("创建TCPServer连接:");
try {
serverSocket = new ServerSocket(port);
return serverSocket;
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("创建TCPServer连接", "创建TCPServer连接失败");
e.printStackTrace();
return null;
}
}
/*
* 开启TCP Server服务器
*/
public void startTcpServer(int port){
// ServerSocket serverSocket = null;
Socket socket = null;

try {
serverSocket=creatServerSocket(port);
if(serverSocket!=null){
// receiveDataService.sendOkToSerialPort();//发送+OK给串口,说明TCPServer创建成功
while (true) {
boolean flag=serverSocket.isClosed();
if(!serverSocket.isClosed()){

// 获得连接
System.out.println("TCP SERVER 等待连接");
socket = serverSocket.accept();
if(socketList.size()<8){
socketList.add(socket);
// connectConunt++;
Sysout.out.println("等待连接"+ "连接成功!");
// 启动线程,处理连接
new LogicThread(socket);
}else{
// receiveDataService.sendErrToSerialPort();//发送+ERR给串口,说明TCPServer创建失败
Sysout.out.println("开启一个TCP Server连接"+"最大连接数不超过8个,连接失败");
}

}else{
Sysout.out.println("TCP Server等待连接"+"ServerSocket已经关闭");
break;
}

}
}else{
// receiveDataService.sendErrToSerialPort();//发送+ERR给串口,说明TCPServer创建失败
Sysout.out.println("开启TCPServer"+"创建TCPServer连接失败");
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
serverSocket.close();
} catch (Exception e) {
}
}
}
}

我在另外一个类里面调用下面方法关闭连接,但是下次客户端还能连接上TCP Server,说明这样不能完全关闭TCP Server
MulThreadSocketServer.serverSocket.close();

我该如何关闭已经创建好的TCP Server呢?求大家指点一二,不胜感激!谢谢!
...全文
151 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtbahacker 2014-06-18
  • 打赏
  • 举报
回复
嗯,你方法没错,你看看你方法执行了没
vnvlyp 2014-06-16
  • 打赏
  • 举报
回复
关闭就是用close,如果还能连上那只能说明没有正常执行,你看下有什么错误没有,catch住的所有exception都给他print出来。 顺便说下你这个设计感觉就是混乱不堪。。 你的startTcpServer又不是static,但是serverSocket和socketList又是static的,看起来像单例,实际又不是,不懂你的设计逻辑。。

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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