java socket tomcat_在Tomcat环境下使用socket通信
最近在做一个APP的服务器端,但是APP和服务器端使用的是HTTP的通信协议,而另一方与服务器端通信却使用的是自定义的通信协议。具体的系统拓扑如下:
为了完成以上的需求,一般的解决方案有两种:
自己实现服务器端程序,利用已经实现的http jar包来实现http通信协议,同时利用socket通信来实现自己的通信协议;
将socket通信整合在tomcat中,利用tomcat来提供http通信,同时实现自己的通信协议。
对于第一种方法,所有的都需要自己来实现,需要自己进行环境的初始化,配置管理,比较麻烦。目前为了方便开发,快速利用web的各种框架,采用的是第二种方法,将socket通信整合在tomcat环境下,随着web的启动,初始化一个socketserver来进行自定义的数据通信。
在web环境下,tomcat整合socket的主要的难处就是如何触发socket服务器的初始化,等待接受来自客户端的连接,且socket服务器的初始化应该只初始化一次。在web启动的时候,toncat会加载context-param -> listener -> filter -> servlet,所以就可以在这些类中来初始化socket服务来进行通信。于是就新建一个SocketServlet并在
public void init(ServletConfig config) throws ServletException
方法中初始化一个ECHO Server的SocketServer来进行通信
// TODO Auto-generated method stub
System.out.println("this is the socket program ----zhangwenwen");
try {
ServerSocket serverSocket=new ServerSocket(8191);
socket=serverSocket.accept();
InputStream inputStream=socket.getInputStream();
OutputStream outputStream=socket.getOutputStream();
Scanner in=new Scanner(inputStream);
PrintWriter printWriter=new PrintWriter(outputStream);
printWriter.write("Hello Enter BYE to exit!");
boolean done=false;
while(!done&&in.hasNextLine()){
String line=in.nextLine();
System.out.println(line);
printWriter.println("ECHO:"+line);
printWriter.flush();
if (line.trim().equals("BYE")) {
done=true;
}
}
in.close();
inputStream.close();
outputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在web.xml中配置:
socketdemo
SocketServlet
1
socketdemo
/demo
但是在启动时候却因为SocketServer一直在运行,Init方法运行不能返回,从而ServletSocket不能运行结束,tomcat最后会因为启动失败而退出。
因而,现在为了解决这个问题,于是就将SocketServer封装在一个线程中
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import javax.servlet.annotation.WebFilter;
import sun.print.resources.serviceui;
public class SocketDemo extends Thread {
private static Socket socket=null;
public static Socket getSocket() {
return socket;
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("this is the socket program ----zhangwenwen");
try {
ServerSocket serverSocket=new ServerSocket(8191);
socket=serverSocket.accept();
InputStream inputStream=socket.getInputStream();
OutputStream outputStream=socket.getOutputStream();
Scanner in=new Scanner(inputStream);
PrintWriter printWriter=new PrintWriter(outputStream);
printWriter.write("Hello Enter BYE to exit!\n");
printWriter.flush();
boolean done=false;
while(!done&&in.hasNextLine()){
String line=in.nextLine();
System.out.println(line);
printWriter.println("ECHO:"+line);
printWriter.flush();
if (line.trim().equals("BYE")) {
done=true;
}
}
in.close();
inputStream.close();
outputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
然后在Init方法里面在启动一个线程来初始化SocketServer:
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
SocketDemo socketDemo=new SocketDemo();
socketDemo.start();
this.socket=socketDemo.getSocket();
}
这样就实现了在tomcat下进行,在控制台下用telnet进行访问:
java socket tomcat_在Tomcat环境下使用socket通信相关推荐
- 关于tomcat环境下上传大文件遇到的问题及解决办法
转载自:http://blog.csdn.net/tqwwilliam/article/details/7108247 问题描述: 关于tomcat环境下上传大文件遇到的问题及解决办法 解决方案: 1 ...
- java反序列化漏洞POP查找_利用 Java 反序列化漏洞在受限环境下获取反向 Shell
原标题:利用 Java 反序列化漏洞在受限环境下获取反向 Shell 原文链接: https://medium.com/abn-amro-red-team/java-deserialization-f ...
- java中HashMap在多线程环境下引起CPU100%的问题解决
最近项目中出现了Tomcat占用CPU100%的情况,原以为是代码中出现死循环,后台使用jstack做了dump,发现是系统中不合理使用HashMap导致出现了死循环(注意不是死锁). 产生这个死循环 ...
- 基于Tomcat环境下运行JSP文件(基础版)
1. JSP简介 JSP:Java Server Pages.在传统的HTML文件(*htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页. 2 ...
- java wifidog_wifidog认证服务器家用环境下部署(java版)
本文所讲的是基于一个java版wifidog认证服务器的开源项目,在windows环境下搭建wifidog认证服务器配合固件实现用户名密码的认证. 大致步骤如下: 一,准备 1.搭建硬件及网络环境 a ...
- java web shiro_javase和javaweb环境下shiro的搭建
shiro-1 javase环境下搭建shiro 1.导入jar包 2.配置文件:存储临时文件 shiro.ini文件:存储数据,用户名,密码,角色,权限 3.代码 // 1.获取安全管理器 Fact ...
- java本地可以发到linux不行,java 使用 ftp 在windows环境下可以正常下载文件,在linux环境下不行...
windows环境下使用 public static void dowmloadFtpWindos(String fileUuid, HttpServletRequest request,HttpSe ...
- java读取sh脚本_linux环境下java读取sh脚本并执行
linux环境下java读取sh脚本并执行 作者: CSDN博客 更新时间:2013-09-27 11:49:16 原文链接 Process process; String cmd = "/ ...
- dept在Java里面_EmpDeptManager 在JavaEE环境下搭建三大框架体系实现员工的增删改查系统 Develop 261万源代码下载- www.pudn.com...
文件名称: EmpDeptManager下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 39 KB 上传时间: 2016-07-08 下载次数: 0 提 供 者 ...
最新文章
- html手机端适配怎么调试,html5面试常见问题及答案:移动端布局与适配篇
- Python学习教程实用技法:通过公共键对字典列表排序—itemgetter
- sql里查询一个组和组的用户数怎么查?_【牛客网SQL刷题】留存率怎么算?
- ABBYY FineReader 12中怎样禁用自动处理
- Oracle ASM Cluster File Systems (ACFS)应用指南
- SAP WebClient UI component模型元数据解析工具
- linux操作系统环境变量的配置
- mysql数据变化通通知机制_深入理解Notification机制
- java平方和和立方和3_平方和与立方和
- Spring Boot 集成 Memcached
- yum安装wget失败,替换yum源为阿里yum源并重亲安装
- Adobe软件注册机
- photoshop给照片去斑的一些办法
- windows git bash 设置多个php版本和composer版本
- 巴斯扩散模型-Bass Diffusion Model
- 小程序微信支付提示:商户订单号重复
- mysql介绍——基础知识
- 小学生都能读懂的区块链原理和术语介绍(故事图文)-引自《从零开始自己动手写区块链》
- 有没有你家?贵阳七村拟入选全省乡村旅游重点村名录
- 区块链革命 - 推荐序一 区块链革命:从失控说起