开了一个Socket监听服务,TOMCAT就没办法继续启动了

nizhicheng 2010-09-14 03:36:00
WEB项目:我用一个SERVLET去跑SOCKET监听服务.但是每次跑到这里就会发现WEB项目 无法继续加载了! 网页就不能访问,当时SOCKET服务是正常工作的.
这里PO下我的监听服务:

public class Listenserve {
private ServerSocket ss;
private boolean listening = true;
public static List<Socket> client_file_sockets = new ArrayList<Socket>();

public Listenserve() {
Init();// 初始化
//listn();// 启动监听
}

public void Init() {
try {
ss = new ServerSocket(2332, 1);
System.out.println("在2332端口监听");
} catch (IOException ie) {
System.out.println("无法在2332端口监听");
ie.printStackTrace();
}
}

public void listn() {
try {
while (listening){
System.out.println("!!!!!!!!!!!!!!!!!!!!!!");
if(ss.accept()!=null){
//new Thread(new Dialogserve(ss.accept())).start();
System.out.println("******************");
}
}

} catch (IOException ie) {
ie.printStackTrace();
}


}

请各位大大 指点下~小弟刚学网络编程~~
...全文
508 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainsilence 2010-09-14
  • 打赏
  • 举报
回复
就这样就结贴了。。。。。
rainsilence 2010-09-14
  • 打赏
  • 举报
回复
我建议你把整个ServerSocket的监听放一个线程。
每次收到Socket,再起一个线程。否则你Tomcat肯定启动不了了
rainsilence 2010-09-14
  • 打赏
  • 举报
回复
我很无语。。。
while (listening){
System.out.println("!!!!!!!!!!!!!!!!!!!!!!");
if(ss.accept()!=null){
new Thread(new Dialogserve(ss.accept())).start();
System.out.println("******************");
}
}


什么写法。。。。这种写法无论放在哪里都是错的
ss.accept()一旦调用,直接进入堵塞。
如果有Socket request,返回一个Socket。但是,在if里又出现了ss.accept()!!!!!!也就是说,第一个Socket直接被忽略了。
nizhicheng 2010-09-14
  • 打赏
  • 举报
回复
解决是解决,弄了TCPSERVERLET 就是跑一个 SOCKET监听服务的线程!不知道以后性能会咋样!
nizhicheng 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kokobox 的回复:]
引用 1 楼 nizhicheng 的回复:

new Thread(new Dialogserve(ss.accept())).start();
注释掉,项目才能启动完成


这个就是用现成的方式去启动。 可以这样做,但是不建议在tomcat里启动一个线程。

建议单独启动一个线程。
[/Quote]
不是很理解 这句话是什么意思 我现在就是需要TOMCAT启动的时候启动SOCKET服务
nizhicheng 2010-09-14
  • 打赏
  • 举报
回复
package com.liusoft.dlog4j.test;

import java.io.*;
import java.lang.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class Listenserve implements Runnable {
private ServerSocket ss;
private boolean listening = true;
public static List<Socket> client_file_sockets = new ArrayList<Socket>();

public Listenserve() {
Init();// 初始化
run();// 启动监听
}

public void Init() {
try {
ss = new ServerSocket(2332, 1);
System.out.println("在2332端口监听");
} catch (IOException ie) {
System.out.println("无法在2332端口监听");
ie.printStackTrace();
}
}

public void run() {
try {
while (listening){
System.out.println("!!!!!!!!!!!!!!!!!!!!!!");
if(ss.accept()!=null){
new Thread(new Dialogserve(ss.accept())).start();
System.out.println("******************");
}
}

} catch (IOException ie) {
ie.printStackTrace();
}


}


}


我改成这样 可以吗?
kokobox 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nizhicheng 的回复:]

new Thread(new Dialogserve(ss.accept())).start();
注释掉,项目才能启动完成
[/Quote]

这个就是用现成的方式去启动。 可以这样做,但是不建议在tomcat里启动一个线程。

建议单独启动一个线程。
kokobox 2010-09-14
  • 打赏
  • 举报
回复
应该因为他进入listn()这个方法死循环在里面了,不能往下执行了。所以就不能加载web项目了。

建议socket监听用线程的方式启动。

或者单独启动一个线程去跑这个监听。
nizhicheng 2010-09-14
  • 打赏
  • 举报
回复
new Thread(new Dialogserve(ss.accept())).start();
注释掉,项目才能启动完成
内容概要:本文围绕“基于周期增强时序预测与帕累托多目标优化的建筑群储能鲁棒调度策略”开展研究,提出了一种融合高精度预测与多目标优化的综合调度方法。首先,采用周期增强的时序预测技术对建筑群的电力负荷与可再生能源出力进行精准建模,充分挖掘数据的周期性特征以提升预测准确性;其次,构建基于帕累托前沿的多目标优化模型,综合考虑经济成本最低、碳排放最小化以及系统运行鲁棒性等多重目标;最后,引入鲁棒优化机制应对预测不确定性,增强调度方案在复杂动态环境下的适应能力与稳定性。研究通过Python编程实现了完整的算法流程,涵盖数据预处理、模型构建、优化求解与结果分析,适用于建筑群或园区级综合能源系统的协同优化调度。; 适合人群:具备一定电力系统基础知识、优化算法理论及Python编程能力的研究生、科研人员和工程技术人员,尤其适合从事综合能源系统、智能电网、储能调度与低碳运行等领域的研究人员。; 使用场景及目标:①应用于园区级或多建筑群能源系统,实现经济性与低碳化协同优化调度;②解决可再生能源波动性和负荷不确定性带来的调度风险,提升系统鲁棒性;③为相关科研提供一套可复现、可扩展的周期性预测与多目标鲁棒优化集成技术框架; 阅读建议:建议结合文中提供的Python代码进行实践操作,重点理解周期增强预测模块的设计逻辑与帕累托最优解集的求解过程,可通过更换实际数据集、调整权重策略或引入新约束条件进行拓展研究,从而深化对鲁棒调度机制与多目标权衡关系的理解与应用能力。

81,108

社区成员

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

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