浏览 4358 次
锁定老帖子 主题:令人郁闷的socket重联问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-12
最近弄socket 流程是 主项目保持一个单例客户端socket类 在执行一些操作的时候通过此客户端socket通知服务器 如下 package com.common.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class UtilSocket { private static final UtilSocket INSTANCE = new UtilSocket(); private final String host = "192.168.1.201"; private final int port = 4321; private BufferedReader socketReader; private PrintWriter socketWriter; private Socket client = null; private UtilSocket() { connServer(); System.out.println("构造UtilSocket!"); } public static UtilSocket getInstance() { if(INSTANCE.client == null || INSTANCE.client.isClosed()){ INSTANCE.downServer(); INSTANCE.connServer(); } return INSTANCE; } //链接远程服务器 public void connServer() { try { client = new Socket(host,port); socketReader = new BufferedReader(new InputStreamReader(client.getInputStream(),"UTF-8")); socketWriter = new PrintWriter(client.getOutputStream(),true); } catch(UnknownHostException e) { System.out.println("Error1 setting up socket connection: unknown host at "+host+":"+port); } catch(IOException e) { System.out.println("Error2 setting up socket connection: "+e); } } //断开远程服务器 public void downServer() { try { socketWriter.close(); socketReader.close(); client.close(); }catch(IOException e) { System.out.println("Error tearing down socket connection: "+e); } } //向服务器通知内容 public void putInfo(String str) { try { socketWriter.println(str); } catch(Exception e) { System.out.println("Error reading from file: "+str); } } }
测试之后问题出现了
public static UtilSocket getInstance() { if(INSTANCE.client == null || INSTANCE.client.isClosed()){ INSTANCE.downServer(); INSTANCE.connServer(); } try{ INSTANCE.client.sendUrgentData(0xFF); }catch(Exception ex){ System.out.println("远程服务器断开!重联!"); INSTANCE.downServer(); INSTANCE.connServer(); } return INSTANCE; }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-13
pengsky2002 写道
...... public class UtilSocket { //向服务器通知内容 public void putInfo(String str) { try { // 在这里作判读,如果没有连接上,就重新连接。知道连接上。 socketWriter.println(str); } catch(Exception e) { System.out.println("Error reading from file: "+str); } } }
我想这样子也应该是可以的。
或者,不用长连接。直接短连接。这样子也会简单很多。 |
|
返回顶楼 | |