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);// 出错,打印出错信息 } }}
阿里云幸运券 欢迎领取
阅读全文
0 0
- web应用添加socket接口
- Web应用启动socket服务
- WEB应用添加SSL支持
- 为zarafa-admin添加web接口问题解决
- Web项目添加接口响应时长
- web socket在PHP中的应用
- Web应用接口应该考虑的几个问题
- Web应用共享数据区ServletContext接口
- Web应用共享数据区ServletContext接口
- 个人web应用总结(不断添加)
- WEB应用添加SSL支持(by quqi99)
- 为web应用添加Hibernate支持
- Jetty-为web应用添加网页
- Web系统与后台Server的socket接口测试
- Web系统与后台Server的socket接口测试
- socket接口
- Socket接口
- SOCKET接口
- 系统间的通信方式之(Java RMI方式详解下)(九)
- 微信小程序图文混编
- Creating a universal SNP and small indel variant caller with deep neural networks理解
- 1021. 个位数统计 (15)
- HDU 3478 Catch【二分图+思维】
- web应用添加socket接口
- PHP FPM php-fpm.conf设置详解
- jzoj P1595 过路费
- Python 中pandas读取文件Initializing from file failed
- mac 终端常用命令和vim普通命令使用
- HDOJ 1418 抱歉
- 在别人电脑上运行本机tomcat项目的流程以及问题解决
- 习题6.5
- css:float的深度理解