关于Servlet与Socket的问题 Servlet作为客户端?Servlet也是运行在服务器上的, 你是说 Servlet作为Socket通讯的客户端吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是的,我是想将Servlet做为与Socket通讯的客户端!望指点!谢谢 在 Web Server 中, Server 启动后,只会实例化一个 Servlet Instance, 所以标识应该没有问题.比如说, 你建了一个 InterSocketServlet, 那么 Server 中就只会有一个 InterSocketSrevlet 的实例, 并不是一个 B 一个 InterSocketServlet.你可以在InterSocketServlet 设立一个socket成员变量 , 在ServletInit方法中就建立和 VC Socket Server 的连接, 这样, 该连接就和 该 Servlet的生命周期一样了. Servlet可以通过Session 识别 Browse 客户端,你可以在 doGet()中 通过 session.getAttribute("user") 读取或设置 session.setAttribute("user", idUser);来标识. 给客户端生成一个无限长的html(不断的输出),并且隔一段时间自动刷新。 写到servlet上,客户端就能看到了。 public class MsgSocket extends Socket { public InputStream in; public OutputStream out; public BufferedReader br; public PrintWriter pw; public MsgSocket(String hostName,int PORT) throws UnknownHostException, IOException { super(hostName,PORT); try{ in = this.getInputStream(); out = this.getOutputStream(); br = new BufferedReader(new InputStreamReader(in)); pw = new PrintWriter(out,true); }catch(Exception e){ System.out.println(e); } } public MsgSocket() { super(); } public void Start() { } public String ReadData() { String strData = ""; try{ strData = br.readLine(); return strData; }catch(Exception e){ return null; } } public void SendData(String strSend){ pw.println(strSend); }}以上是我继承的Sock类,用ReadData()从服务器中读取数据。我在Servlet中是这样写的,public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); out = response.getWriter(); out.println("<html>"); out.println("<head><title>chatServlet</title></head>"); out.println("<meta http-equiv=\"refresh\" content=\"10\">"); out.println("<body>"); String strTmp; String strData = ""; while(true) { try{ strTmp = ms.ReadData(); if(strTmp==null) break; strData = strData + strTmp + "<br>"; }catch(Exception e){ break; } } out.println("</body></html>"); }为什么While循环不会结束呢?服务器只发送了"Hello World"一句话。请大侠们帮帮我,给看看到底是哪的问题,谢谢! 你的 ms 是在 Init() 里建立的吗?如果和 Server 的连接没有断的话, ReadData()返回的值可能不会为null(猜测? 有待各位验证)。如果是这样的话, 你可以每次读取一定数目行数(比如:10行), 就结束。 while(true) { try{ strTmp = ms.ReadData(); if(strTmp==null) break; strData = strData + strTmp + "<br>"; //加上如下2句 out.println(strData); out.flush(); }catch(Exception e){ break; } } while(true) { try{ strTmp = ms.ReadData(); if(strTmp==null) break; strData = strData + strTmp + "<br>"; //加上如下2句 out.println(strData); out.flush(); }catch(Exception e){ break; } }为什么While循环不会结束呢?是不会断的,除非你的sock 断了。 找不到 method : flush()! 你所想象的即时聊天程序用你所希望用的方法无法实现:1。servlet基于http协议的,http协议是无连接的。2。一个servlet的方法一次服务一个用户。 关于重复提交action的问题 tomcat运行数据库操作的servlet文件时出现 HTTP Status 500 错误怎么解决???(急急急急 无语了快! 求一sql语句 MSSQL SERVER超时已经过期的问题 寻求 javascript装扮网页设计的精彩源代码或有关资料 struts中property参数问题 jsp怎样读取rss的内容 如何使用树型控件? sql 语句多个条件查询 的处理 getstring是不是会自动取掉空格和回车啊? 关于JSP中获取输入流的问题,急呀,一定给分! 如何用java执行批处理文件(bat),不要小看,试试再说,谢谢!
public OutputStream out;
public BufferedReader br;
public PrintWriter pw; public MsgSocket(String hostName,int PORT) throws UnknownHostException, IOException
{
super(hostName,PORT);
try{
in = this.getInputStream();
out = this.getOutputStream();
br = new BufferedReader(new InputStreamReader(in));
pw = new PrintWriter(out,true);
}catch(Exception e){
System.out.println(e);
}
} public MsgSocket()
{
super();
} public void Start()
{
}
public String ReadData()
{
String strData = "";
try{
strData = br.readLine();
return strData;
}catch(Exception e){
return null;
}
} public void SendData(String strSend){
pw.println(strSend);
}
}以上是我继承的Sock类,用ReadData()从服务器中读取数据。我在Servlet中是这样写的,public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType(CONTENT_TYPE);
out = response.getWriter();
out.println("<html>");
out.println("<head><title>chatServlet</title></head>");
out.println("<meta http-equiv=\"refresh\" content=\"10\">");
out.println("<body>");
String strTmp;
String strData = ""; while(true)
{
try{
strTmp = ms.ReadData();
if(strTmp==null) break;
strData = strData + strTmp + "<br>";
}catch(Exception e){
break;
}
}
out.println("</body></html>");
}为什么While循环不会结束呢?服务器只发送了"Hello World"一句话。
请大侠们帮帮我,给看看到底是哪的问题,谢谢!
{
try{
strTmp = ms.ReadData();
if(strTmp==null) break;
strData = strData + strTmp + "<br>";
//加上如下2句
out.println(strData);
out.flush();
}catch(Exception e){
break;
}
}
{
try{
strTmp = ms.ReadData();
if(strTmp==null) break;
strData = strData + strTmp + "<br>";
//加上如下2句
out.println(strData);
out.flush();
}catch(Exception e){
break;
}
}
为什么While循环不会结束呢?是不会断的,除非你的sock 断了。
2。一个servlet的方法一次服务一个用户。