web应用添加socket接口

来源:互联网 发布:弹弓淘宝网 编辑:程序博客网 时间:2024/05/22 14:18

1.涉及到的类



2.MyClientRefreshTask

import java.util.ArrayList;import java.util.List;public class MyClientRefreshTask extends java.util.TimerTask {@Overridepublic void run() {refreshClient();}private static void refreshClient() {List<SocketClientBean> dels = new ArrayList<SocketClientBean>();for (int i = 0; i < MyServer.clientlist.size(); i++) {if (MyServer.clientlist.get(i).getSocket().isClosed()) {System.out.println("it is the del client!");dels.add(MyServer.clientlist.get(i));}}//System.out.println("clientlist num:" + MyServer.clientlist.size());//System.out.println("dels num:" + dels.size());MyServer.clientlist.removeAll(dels);//System.out.println("clientlist left num:" + MyServer.clientlist.size());}}

3.MyServer

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.util.ArrayList;import java.util.List;import java.util.Timer;import javax.annotation.Resource;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Service;import com.rainier.ve.service.common.FileUploadService;import com.rainier.ve.service.u3d.ScoreRuleService;import cn.org.rapid_framework.util.holder.ApplicationContextHolder;public class MyServer {public static List<SocketClientBean> clientlist = new ArrayList<SocketClientBean>();private static Timer timer = new Timer();public static void rerfresh() {timer.schedule(new MyClientRefreshTask(), 1000 * 0, 1000 * 15);}public static void destroyedTimer() {if (timer != null) {timer.cancel();}}public static void invoke(final Socket client) throws IOException {new Thread(new Runnable() {public void run() {String errcmd = "{\"cmd\":-1}";String nocmd = "{\"cmd\":0}";BufferedReader in = null;PrintWriter out = null;try {in = new BufferedReader(new InputStreamReader(client.getInputStream()));out = new PrintWriter(client.getOutputStream());Integer count = 0;//while (true) {String cmdmsg = in.readLine();count++;//System.out.println(count);//System.out.println("Server received " + cmdmsg);//Gson gs=new Gson();//JSONObject jsmsg = JSONObject.fromObject(cmdmsg);//System.out.println("JSONObject success");//String cmd = jsmsg.getString("cmd");//switch (cmd) {//case "1"://com.progress.cmd1.process(client, jsmsg);//break;//case "2"://com.progress.cmd2.process(client, jsmsg);//break;//default://out.println(nocmd);//out.flush();//}System.out.println("msg:"+cmdmsg);//if ("bye".equals(cmdmsg)) {//break;//}String toClientStr="返回的数据";out.println(toClientStr);out.flush();//}//} catch (JSONException ex) {//System.out.println("JSONObject err");//out.println(errcmd);//out.flush();} catch (Exception ex) {ex.printStackTrace();} finally {try {in.close();} catch (Exception e) {}try {out.close();} catch (Exception e) {}try {client.close();} catch (Exception e) {}}}}).start();}}

4.ServerSocketListener

import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class ServerSocketListener implements ServletContextListener {private SocketThread socketThread;    public void contextDestroyed(ServletContextEvent e)    {        if (socketThread != null && socketThread.isInterrupted())        {            socketThread.closeServerSocket();            socketThread.interrupt();        }    }    public void contextInitialized(ServletContextEvent e)    {        ServletContext servletContext = e.getServletContext();        System.out.println("Server contextInitialized over");        if (socketThread == null)        {            socketThread = new SocketThread(null, servletContext);            socketThread.start();         }    }}

5.SocketClientBean

import java.net.Socket;public class SocketClientBean {private Socket socket;public Socket getSocket() {return socket;}public void setSocket(Socket socket) {this.socket = socket;}}

6.SocketThread

import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import javax.servlet.ServletContext;public class SocketThread extends Thread {Integer count = 0;    private ServletContext servletContext;    private ServerSocket serverSocket;    public SocketThread(ServerSocket serverSocket, ServletContext servletContext)    {        this.servletContext = servletContext;        // 从web.xml中context-param节点获取socket端口        String port = this.servletContext.getInitParameter("socketPort");        if (serverSocket == null)        {            try            {                this.serverSocket = new ServerSocket(Integer.parseInt(port));            }            catch (IOException e)            {                e.printStackTrace();            }        }    }    public void run()    {        try        {            Integer count = 0;            while (!this.isInterrupted())            {                MyServer.rerfresh();                                Socket socket = serverSocket.accept();                count++;//                System.out.println("Server SocketThread start:"+count);                if (socket != null)                {                    SocketClientBean client = new SocketClientBean();                    client.setSocket(socket);                    MyServer.clientlist.add(client);//                    System.out.println("new commer:"+socket.getRemoteSocketAddress().toString());                    MyServer.invoke(socket);                }            }        }        catch (Exception ex)        {            System.out.println("SocketThread err:"+ex.getMessage());        }    }        public void closeServerSocket()    {        try        {            if (serverSocket != null && !serverSocket.isClosed())            {                serverSocket.close();                MyServer.destroyedTimer();            }        }        catch (Exception ex)        {            System.out.println("SocketThread err:"+ex.getMessage());        }    }}

7.ClientTest

import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class ClientTest { public static void main(String[] args) { try {              // 1、创建客户端Socket,指定服务器地址和端口              Socket socket=new Socket("127.0.0.1",9090);              System.out.println("客户端启动成功");              // 2、获取输出流,向服务器端发送信息              // 向本机的9090端口发出客户请求              BufferedReader br = new BufferedReader(new InputStreamReader(System.in));              // 由系统标准输入设备构造BufferedReader对象              PrintWriter write = new PrintWriter(socket.getOutputStream());              // 由Socket对象得到输出流,并构造PrintWriter对象              //3、获取输入流,并读取服务器端的响应信息               BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));              // 由Socket对象得到输入流,并构造相应的BufferedReader对象              String readline=             "传到服务器的字符串";              write.println(readline);              write.flush();//              readline = br.readLine(); // 从系统标准输入读入一字符串//              write.println("123");//              while (!readline.equals("end")) {//                  // 若从标准输入读入的字符串为 "end"则停止循环//                  write.println(readline);//                  // 将从系统标准输入读入的字符串输出到Server//                  write.flush();//                  // 刷新输出流,使Server马上收到该字符串//                  System.out.println("Client:" + readline);//                  // 在系统标准输出上打印读入的字符串//                  System.out.println("Server:" + in.readLine());//                  // 从Server读入一字符串,并打印到标准输出上//                  readline = br.readLine(); // 从系统标准输入读入一字符串//              } // 继续循环              //4、关闭资源               write.close(); // 关闭Socket输出流              in.close(); // 关闭Socket输入流              socket.close(); // 关闭Socket          } catch (Exception e) {              System.out.println("can not listen to:" + e);// 出错,打印出错信息          }    }}


阿里云幸运券 欢迎领取