求救关于socket连接长时间后不能收到信息的问题

liyingwu 2005-07-15 09:03:32
小弟再做一个短信的合作平台接口,可是这个接口工作到半夜就收不到分发中心给的数据了.不知道怎么回事,请大家帮忙啊,下面是我的代码的主要部分,请各位高手指点啊

s = new Socket(strIp,port);
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

out.write(msg);//此处为登陆串信息
out.flush();

boolean flag=true;
cl=new CheckLink(in,out,s,jt,flag);//此处启动一个连接检测线程,用于监控连接是否正常
cl.start();

String line="";
while((line=in.readLine())!=null){
if(line.equalsIgnoreCase("PASS")){
jt.append("Success connect server...\n");
jt.append("=========================================\n");
ss=new SmsSend(s,in,out,jt,true);//此处启动一个短信发送线程
ss.start();
}

//处理分发中心得测试指令,同时给出回应
if(line.indexOf("activetest")!=-1){
String reMsg=line.substring(line.indexOf("=")+1);
out.write("Received CommandId="+reMsg+"\n");
out.flush();
}

if(line.indexOf("deliver ")!=-1){
String recStr=line.substring(8);
jt.append("========================================================\n");
jt.append(sf.format(new java.util.Date())+"resive mo:"+recStr+"\n");
jt.append("========================================================\n");
Deliver d=new Deliver(out,in,recStr,jt);
d.start();
}

下面是连接检测程序.不知道规范不规范了的.
public class CheckLink extends Thread{
private String msg="XXXXXXX\n";//这里是连接登陆信息串,都已隐藏了的
private BufferedReader in;
private BufferedWriter out;
private Socket s;
private boolean flag;
private JTextArea jt;
public CheckLink(BufferedReader in,BufferedWriter out,Socket s,JTextArea jt,boolean flag){
this.in=in;
this.out=out;
this.s=s;
this.jt=jt;
this.flag=flag;
}

public void run(){
check();
}

public void check(){
while(flag){
/////////////////////////////
while(s == null || s.isClosed() || !s.isConnected() ||!s.isBound() || s.isInputShutdown() ||s.isOutputShutdown()){
try {
jt.append("====================================\n");
jt.append("socket is closed! reconnect it!\n");
jt.append("====================================\n");
s=s = new Socket(strIp, port);//这个IP和PORT都隐藏了的
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

//登陆服务端
out.write(msg);
out.flush();
try {
sleep(1000*30);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
sleep(1000*60*3);
} catch (InterruptedException e) {
e.printStackTrace();
}
////////////////////////////
}
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}

...全文
313 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
liushui05 2005-07-20
  • 打赏
  • 举报
回复
设置下连接超时
liyingwu 2005-07-15
  • 打赏
  • 举报
回复
没有人知道me ?

67,513

社区成员

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

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