Servlet作为客户端?Servlet也是运行在服务器上的, 你是说 Servlet作为Socket通讯的客户端吗?

解决方案 »

  1.   

    是的,我是想将Servlet做为与Socket通讯的客户端!望指点!谢谢
      

  2.   

    在 Web Server 中, Server 启动后,只会实例化一个 Servlet Instance, 所以标识应该没有问题.比如说, 你建了一个 InterSocketServlet, 那么 Server 中就只会有一个 InterSocketSrevlet 的实例, 并不是一个 B 一个 InterSocketServlet.你可以在InterSocketServlet    设立一个socket成员变量  , 在ServletInit方法中就建立和 VC Socket Server 的连接, 这样, 该连接就和 该 Servlet的生命周期一样了.
      

  3.   

    Servlet可以通过Session 识别 Browse 客户端,你可以在 doGet()中 通过 session.getAttribute("user") 读取或设置  session.setAttribute("user", idUser);来标识.
      

  4.   

    给客户端生成一个无限长的html(不断的输出),并且隔一段时间自动刷新。
      

  5.   

    写到servlet上,客户端就能看到了。
      

  6.   

    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"一句话。
    请大侠们帮帮我,给看看到底是哪的问题,谢谢!
      

  7.   

    你的 ms 是在 Init() 里建立的吗?如果和 Server 的连接没有断的话, ReadData()返回的值可能不会为null(猜测? 有待各位验证)。如果是这样的话, 你可以每次读取一定数目行数(比如:10行), 就结束。
      

  8.   

    while(true)
        {
          try{
            strTmp = ms.ReadData();
            if(strTmp==null) break;
            strData = strData + strTmp + "<br>";
           //加上如下2句
           out.println(strData);
           out.flush();
          }catch(Exception e){
            break;
          }
        }
      

  9.   

    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 断了。
      

  10.   

    找不到 method : flush()!
      

  11.   

    你所想象的即时聊天程序用你所希望用的方法无法实现:1。servlet基于http协议的,http协议是无连接的。
    2。一个servlet的方法一次服务一个用户。