已经可以取得数据,当我在网站提交一个操作的时候,怎样用已经创建的连接向socket客户端发送命令并且接收数据,下面是我的代码
Mylisten.javapackage socket;import javax.servlet.*;
public class Mylisten implements ServletContextListener {    public void contextInitialized(ServletContextEvent event) {        String part = event.getServletContext().getInitParameter("socketPort");
        String maxConcent=event.getServletContext().getInitParameter("maxcount");
        event.getServletContext().log("++++++++++++++++++++++++++++++++");
        event.getServletContext().log("++++ Socket服务随web启动而启动 ++++");
        event.getServletContext().log("++++++++++++++++++++++++++++++++" + part);        new ServerSocketStart(Integer.parseInt(part),Integer.parseInt(maxConcent)).start();
        event.getServletContext().log("++++ Socket服务已经启动完毕 ++++");
        
        
    }    public void contextDestroyed(ServletContextEvent event) {    }
}
ServerSocketStart.java
package socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.*;
import java.util.concurrent.*;
import javax.net.*;
import java.lang.*;
public class ServerSocketStart extends Thread {
    private int port;
    private int maxConnections;
    public ServerSocketStart(int aListenPort, int maxConnections){
        this.port=aListenPort;
        this.maxConnections=maxConnections;
    }
    public void run() {
        ServerSocketFactory serverSocketFactory=ServerSocketFactory.getDefault();
        try {
            ServerSocket serverSocket=serverSocketFactory.createServerSocket(port);
            //serverSocketFactory.
            Socket request = null;
            System.out.println("++++++ ServerSocket已经启动 ++++++");
            this.setUpHandlers();
            while(true) {
                
                request = serverSocket.accept();
                System.out.println("++++++ 客户请求成功 ++++++");
                //接收客户机连接请求
                PooledConnectHandler.processRequest(request);
               
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }    
    public void setUpHandlers() {
        for(int i=0; i<maxConnections; i++) {
         PooledConnectHandler currentHandler = new PooledConnectHandler();
            System.out.println("++++++ Thread-Handler"+i+"已启动 ++++++");
            new Thread(currentHandler, "Handler " + i).start();
        }
    }
}

解决方案 »

  1.   

    PooledConnectHandler.java
    package socket;
    import java.lang.*;
    import java.net.*;
    import java.io.*;
    import java.util.*;
    public class PooledConnectHandler implements Runnable {    protected Socket connection;
        @SuppressWarnings("unchecked")
        protected static List pool = new LinkedList();
        public PooledConnectHandler() {}
        public void handleConnection() {
            System.out.println("客户:"+connection.getInetAddress()+":"+connection.getPort()+" 在时间:"+Calendar.getInstance().getTime().toString()+"访问过!");
           
            try {
            
             BufferedReader buff = new BufferedReader(new InputStreamReader(connection.getInputStream()));   
              PrintWriter pw = new PrintWriter(connection.getOutputStream(),true);                
                 pw.println("Start data transfer.");   
    String d="";
                 // 显示客户端的传输来的信息   
                    
                  int   c; 
                  while   ((c=buff.read())!=0 ){ 
                  char a = (char)c;
                  d+=a;
                  if(d.equals(":531A"))
                  {
                 d ="";
                  }
                  
                  if(d.length()==57){
                  pw.println("Stop data transfer."); 
                  if(WriteIpPort.saveip(connection.getInetAddress().toString(),connection.getPort(),d.substring(d.length()   -   4)))
                             {
                              System.out.print("客户端地址已经保存到数据库");
                             }
                             else
                             {
                              System.out.print("客户端地址保存失败");
                             }
                  System.out.println(d);
                  break;
                  }
                 } 
                
                     //System.out.println("To Client:");   
                   //  Thread.sleep(100);   
                   
               connection.close();   
    //
            }
            catch(FileNotFoundException e) {
                e.printStackTrace();
            }
            catch(IOException e) {
               e.printStackTrace();
            }
        }
        public static void processRequest(Socket requestToHandle) {
            synchronized(pool) {
                pool.add(pool.size(), requestToHandle);
                pool.notifyAll();
            }
        }
        public void run() {
            while(true) {
                synchronized(pool) {
                    while(pool.isEmpty()) {
                        try {
                            pool.wait();
                        }
                        catch(InterruptedException e) {
                            e.printStackTrace(); 
                        }
                    }
                    connection= (Socket)pool.remove(0); 
                }
                handleConnection();
            }
        }
    }
      

  2.   

    我怎样在servlet中使用已经连接上的socket客户端,并且发送命令和接收数据
      

  3.   

    客户连接上之后你要给它们发牌号啊,就像我登录上 QQ 后服务器得知道我在哪个端口上来的,或者它把我的端口告诉所有加我为好友的人(就像 QQ 文件传输在发现两个人在同一个局域网时 QQ 是告诉彼此的 IP 和端口就地解决了,不麻烦服务器中转)。
      

  4.   

    但是现在是在网站上运行,是要整合到网站里面,web通过浏览器请求,服务器才发命令到socket客户端,才接收数据并且解析到浏览器供客户使用
      

  5.   

    在 web.xml里面配一下这个监听就好了。页面所有请求,都会被这个监听器监听,和一般的监听器没区别啊。。
      

  6.   

    package xyz;import java.text.SimpleDateFormat;
    import java.util.Date;import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;public class ListenTest implements ServletContextListener,HttpSessionListener{ int i=0;
    public void contextDestroyed(ServletContextEvent sce) {

    System.out.println("tomcat关闭:"+new Date());
    } public void contextInitialized(ServletContextEvent sce) {

    System.out.println("tomcat启动:"+new Date());
    } public void sessionCreated(HttpSessionEvent arg0) {
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    i++;
    System.out.println("网页开启:"+sdf.format(new Date())+"---------访问量"+i+"次");

    } public void sessionDestroyed(HttpSessionEvent arg0) { System.out.println("网页关闭"+new Date());
    }

    }
      

  7.   

    package xyz;import java.text.SimpleDateFormat;
    import java.util.Date;import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;public class ListenTest implements ServletContextListener,HttpSessionListener{ int i=0;
    public void contextDestroyed(ServletContextEvent sce) {

    System.out.println("tomcat关闭:"+new Date());
    } public void contextInitialized(ServletContextEvent sce) {

    System.out.println("tomcat启动:"+new Date());
    } public void sessionCreated(HttpSessionEvent arg0) {
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    i++;
    System.out.println("网页开启:"+sdf.format(new Date())+"---------访问量"+i+"次");

    } public void sessionDestroyed(HttpSessionEvent arg0) { System.out.println("网页关闭"+new Date());
    }

    }