200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Java Web项目中使用Socket通信多线程 长连接办法

Java Web项目中使用Socket通信多线程 长连接办法

时间:2021-06-11 23:16:03

相关推荐

Java Web项目中使用Socket通信多线程 长连接办法

Java|java教程

java web socket 通信 多线程

Java-java教程

很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听。我们的应用场景是在java项目中,需要外接如一个硬件设备,通过tcp通信,获取设备传上来的数据,并对数据做回应。

友价源码教程,ubuntu如何添加字体,爬虫写入csv乱码,PHP采购进销存管理系统源码,谷歌seo时间lzw

先看一下web的监听代码:

H5项目网站源码,ubuntu 登录卡在桌面,爬虫 412 get 如何,php rebuild,江苏seo人员lzw

import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class AttendSocetListener implements ServletContextListener{private SocketThread socketThread;public void contextDestroyed(ServletContextEvent arg) { if(null!=socketThread && !socketThread.isInterrupted()) { socketThread.closeSocketServer(); socketThread.interrupt(); } } @Overridepublic void contextInitialized(ServletContextEvent arg) { // TODO Auto-generated method stub if(null==socketThread) { //新建线程类 socketThread=new SocketThread(null); //启动线程 socketThread.start(); } } }

创建线程:

帝国cms整站源码,vscode程序员插件推荐,ubuntu 集成开发环境,tomcat起来了,sqlite循环存储,医院网页设计策划书,云服务器ecs远程连接,css3插件,金属前端框架,河南的爬虫,php stomp,汉道seo,springboot审核流程,采集微信文章的网站源码,php网页自动弹窗代码,bootstrop网站模板,网站后台数据处理编辑主要是做什么的啊,js父页面弹出层怎么写,管理系统 网页模板,dijkstra算法程序lzw

import java.io.IOException;import .ServerSocket;import .Socket;import java.util.ArrayList;import java.util.List;public class SocketThread extends Thread{private ServerSocket serverSocket = null; public SocketThread(ServerSocket serverScoket){ try { if(null == serverSocket){ this.serverSocket = new ServerSocket(); System.out.println("socket start"); } } catch (Exception e) { System.out.println("SocketThread创建socket服务出错"); e.printStackTrace(); } } public void run(){ while(true){ try { if(serverSocket==null){break;}else if(serverSocket.isClosed()){break;}Socket socket = serverSocket.accept(); if(null != socket && !socket.isClosed()){ //处理接受的数据 Thread t = new Thread(new SocketOperate(socket)); t.start(); }else{break;}}catch (Exception e) { System.out.println("SocketThread创建socket服务出错"); e.printStackTrace(); } } } public void closeSocketServer(){ try { if(null!=serverSocket && !serverSocket.isClosed()) { serverSocket.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

处理接受到的数据:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import .Socket;public class SocketOperate implements Runnable { private Socket socket; //该线程所处理的Socket所对应的输入流 BufferedReader br = null; String str = null; String content = null; InputStreamReader reader=null; public SocketOperate(Socket socket) throws IOException { this.socket = socket; reader = new InputStreamReader(this.socket.getInputStream(),"utf-"); br = new BufferedReader(reader); } @Overridepublic void run() { try{ // 采用循环不断从Socket中读取客户端发送过来的数据 while (true) { content = readFromClient(); System.out.println(content);if (content == null) { break; } OutputStream os = socket.getOutputStream(); os.write(("RES, OK,, ,#" + "\n").getBytes("utf-")); os.flush();} } catch (IOException e) { e.printStackTrace(); } } //定义读取客户端数据的方法 private String readFromClient() { try{ str = br.readLine(); return str; } //如果捕捉到异常,表明该Socket对应的客户端已经关闭 catch (IOException e) { try {br.close();reader.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} } return null; } }

客户端代码:

packageimport java.io.*;import .*;public class TalkClient {public static void main(String args[]) throws UnknownHostException, IOException {Socket socket=new Socket("...",);PrintWriter os=new PrintWriter(socket.getOutputStream());BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));int i=;while(socket.isConnected()){os.print("BEAT,,,,.,,#"+"\n");os.flush();System.out.println("Client:"+i);System.out.println("Server:"+is.readLine());i++;} //继续循环os.close(); //关闭Socket输出流is.close(); //关闭Socket输入流socket.close(); //关闭Socket}}

更多Java Web项目中使用Socket通信多线程、长连接的方法相关文章请关注PHP中文网!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。