一方面我要随时监听客户端的请求。。另一方面在一定的条件下,客户又可能通过url调用servlet来查询数据库。。

解决方案 »

  1.   

    原因很简单。就是为了少给客户一个程序,即只给一个servlet。
    我试过了,必需要通过url调用一次servlet,程序才能进行监听。。代理如下:
    import javax.servlet.*;  
    import javax.servlet.http.*;
    import java.net.*;  public class msgserver extends HttpServlet                
    {  
    public void service(HttpServletRequest req, HttpServletResponse res)
    throws IOException, ServletException 
    {
    //服务器监听程序代码开始,目的是为了保存客户端发来的用户名及IP
    //接收Client数据,用户及IP等信息////////////////////////////////////////
    byte buffer[] = new byte[256];
    DatagramSocket socket1 = null ;
    try {
    //DatagramSocket socket1 = new DatagramSocket(2222);
    socket1 = new DatagramSocket(2222);
                    DatagramPacket packet1 =  new DatagramPacket(buffer,buffer.length); }
            //服务器监听程序代码到此结束///////////////////////////////////////////////////
       //以下是通过url调用servlet,要处理的功能
       //发送数据到Client,指定端口号/////////////////////////////////////////////
    DatagramSocket cli=null;
    String to=null;  
    String reqString = req.getQueryString();    //读入java代理输入参数
    if(reqString == null) {
    to = "提示:";
    }
    else {
    to=getRightString(reqString,"to=") ;    //取得接收邮件的人名
    }
    try
     {
      //DatagramSocket cli=new DatagramSocket(2222);
      cli=new DatagramSocket(2222); 
      byte sb[]=new byte[512];
      String sen="show/to="+to;  //向client发送show,并向目标to提示消息
      sb=sen.getBytes();
      //System.out.println(sen);  
      DatagramPacket pac=new DatagramPacket(sb,sb.length,InetAddress.getByName("192.168.1.100"),1111);
      cli.send(pac); 
      }
      catch(SocketException se)
      {
    se.printStackTrace();
      }
      catch(IOException ie)
      {
    ie.printStackTrace();  
      }
     catch (Exception e) 
      {
     e.printStackTrace();
      }
      finally {
       if (cli != null) {
    cli.close() ;
    cli.disconnect() ;
       }
      }

    }}