java socket tomcat_在Tomcat环境下使用socket通信

最近在做一个APP的服务器端,但是APP和服务器端使用的是HTTP的通信协议,而另一方与服务器端通信却使用的是自定义的通信协议。具体的系统拓扑如下:

3e80ed0626f5a947c88118b0fcace14d.png

为了完成以上的需求,一般的解决方案有两种:

自己实现服务器端程序,利用已经实现的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进行访问:

8d4a07f86e3609f819012b59cb3c45a5.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓手机主题软件_类似主题软件下载-类似主题安卓官方版下载v2.6.6.3

类似主题app,介绍给大家,是一款可以让我们在线进行主题变幻,拥有更多特色主题风格的服务平台。有了它用户就可以体验不同机型的主题风格,不论苹果还是安卓都是支持的,喜欢的不妨来下载看看!【类似主题应用功…

Java 文件 IO 操作

文章目录1. File类2. RandomAccessFile类3. 流类3.1 字节流3.2 字符流3.3 管道流3.4 ByteArrayInputStream、ByteArrayOutputStream3.5 System.in、System.out3.6 打印流 PrintStream3.7 DataInputStream、DataOutputStream3.8 合并流3.9 字节流与字符流的转换3.10 IO包类层次关…

java dsp_GitHub - Onemeaning/JavaDsp: 数字信号处理(DSP)方面的Java封装,包含常用的一些处理方法,如滤波、信号变换等等。...

JavaDsp数字信号处理(DSP)方面的Java封装,包含常用的一些处理方法,如滤波、信号变换等等。该类库是我本科毕业设计中的一部分,绝大部分都是我自己写实现的,很少部分算法有我另外几个朋友参与讨论和实现,在此表示感谢。…

简单banner制作

简单做了一个banner,效果不是很好,主要温习了蒙版知识和滤镜的使用,其中使用(图像 > 调整 > 照片滤镜, 可以让图片融合得更协调,另外图片上添加斜线做背景,这些小技巧在做banner时,能打造…

苹果11怎么录屏_苹果11怎么设置骚扰电话号码

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。系统版本为,苹果11设置拦截骚扰电话的方法如下:1、首先打开手机设置,找到【勿扰模式】;2、将勿扰模式开启后,点击下方【允…

BigTable的开源实现:HBase数据库

learn from 从0开始学大数据(极客时间) 文章目录1. 两种数据库2. HBase 可伸缩架构3. HBase 可扩展数据模型4. HBase高性能存储1. 两种数据库 关系数据库(RDBMS)缺点: 糟糕的 海量数据处理能力、僵硬的设计约束 从 …

java toast_Android中Toast的用法简介

Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失。下面用一个实例来看看如何使用Toast。1.默认效果代码Toast.makeText(getApplicationCont…

流式计算的代表:Storm、Flink、Spark Streaming

learn from 从0开始学大数据(极客时间) 文章目录1. Storm2. Spark Streaming3. Flink对存储在磁盘上的数据进行大规模计算处理,大数据批处理对实时产生的大规模数据进行处理,大数据流计算 1. Storm 一些系统 业务逻辑 和 数据处…

windows7正版验证_Windows7 寿终正寝:那些一并消逝的软件你知多少?

IT服务圈儿有温度、有态度的IT自媒体平台来源:太平洋电脑网本月,一代经典操作系统微软Windows 7正式迎来了生命周期的完结。微软宣布,此后将不再为Win7提供任何形式的更新,包括安全更新、稳定性更新和功能更新;而仍在使…

stotybord如何添加子视图_Revit软件技巧合集(建筑构件、视图处理、建筑表现、高级技巧)...

Revit软件技巧合集164套(建筑构件、视图处理、建筑表现、高级技巧)BIM技术在我国建筑行业受到了越来越多的关注,也得到了快速地发展。BIM应用软件也如雨后春笋般的涌现,随着时间的推移,revit在BIM应用中将成为设计利器,而在工程施…

ad域不去用frs_Windows Server 2008搭建AD域控服务器 - 小王同学!

AD域安装过程安装DNS服务器一路下一步这里选安装到这里DNS服务器安装成功,可以在主页面看到我们安装的角色安装DNS服务器后我们需要重启服务器安装AD域服务新增AD域服务角色一路下一步——安装即可两条安装成功提示,重启服务器角色中选择AD域服务&#x…

IE下及标准浏览器下的图片旋转(二)—— Canvas(2)

文章过长,一篇无法保存 IE下及标准浏览器下的图片旋转(二)—— Canvas(1) 同样,作为最后,我们使用使用jquery也为canvas写个旋转demo: javascript: $(function () { …

大数据技术 思维导图

learn from 从0开始学大数据(极客时间)

win10win键无反应_台式电脑开机主机没反应怎么办 电脑开机主机没反应解决【详解】...

按了开机按钮后我的台式电脑主机还是没反应,怎么办呢?下面由小编给你做出详细的台式电脑开机主机没反应解方式介绍。(此文主要针对台式电脑做介绍)台式电脑开机主机没反应解方式一:拔掉电源线 然后重复的按开机键5-10下 进行放静电操作 然后再插上电源线…

hadoop 单机伪分布式安装步骤

文章目录1. 安装 Java2. 配置SSH无密码登录3. 下载 hadoop4. 配置环境变量5. 报错处理参考环境 Centos7参考:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.htmlhttps://blog.csdn.net/bingduanlbd/article/details/5187…

Eclipse 为jar包加入 Java Source和Javadoc(如何向Eclipse中导入源码和doc)

: 当我们在MyEclipse中加入Struct,只是引入了jar包,这时使用jar包里面的类,是无法看到源码的,看到的只是这样 是反编译后的一些东西 加入源码 那么如果看到源码呢,就需要导入了 找到这个类对应的jar包,下载…

ppt生成器_小米发布会ppt词云怎么做的

导语在幻灯片中使用文字云或者文字墙是一件非常酷的事情,之前我们看过的很多发布会PPT都有出现文字云设计。利用文字云工具就告别麻烦的排版,让ppt效果更专业,新颖小米发布会ppt 微词云我们先看下几种文字云案例罗振宇《时间的朋友》跨年演讲…

Java实验方法参数传递与递归_4.3类的结构之二:方法(return,重载,可变个数形参,值传递,递归)...

类的设计中,两个重要结构之二:方法* 方法:描述类应该具有的功能。* 比如:Math类:sqrt()\random()\ ..* Scanner类:nextXxx() ..* Arrays类:sort()\binarySearch()\toString()\equals()\..* * 1.…

钢琴块2电脑版_快陪练教师端电脑版下载_快陪练教师端pc版免费下载[在线教学]...

快陪练教师端电脑版是一款钢琴陪练教师的在线教学软件,快陪练教师端电脑版支持语音互动功能。快陪练教师端电脑版可以帮助老师在线教孩子学习钢琴,软件可以让用户清晰地看到学生弹钢琴时的指法,并及时为其纠正不正确的指法,它引入…

LeetCode 1105. 填充书架(DP)

文章目录1. 题目2. 解题1. 题目 附近的家居城促销,你买回了一直心仪的可调节书架,打算把自己的书都整理到新的书架上。 你把要摆放的书 books 都整理好,叠成一摞:从上往下,第 i 本书的厚度为 books[i][0]&#xff0c…