日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java socket tomcat_在Tomcat环境下使用socket通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在做一個APP的服務器端,但是APP和服務器端使用的是HTTP的通信協議,而另一方與服務器端通信卻使用的是自定義的通信協議。具體的系統(tǒng)拓撲如下:

為了完成以上的需求,一般的解決方案有兩種:

自己實現服務器端程序,利用已經實現的http jar包來實現http通信協議,同時利用socket通信來實現自己的通信協議;

將socket通信整合在tomcat中,利用tomcat來提供http通信,同時實現自己的通信協議。

對于第一種方法,所有的都需要自己來實現,需要自己進行環(huán)境的初始化,配置管理,比較麻煩。目前為了方便開發(fā),快速利用web的各種框架,采用的是第二種方法,將socket通信整合在tomcat環(huán)境下,隨著web的啟動,初始化一個socketserver來進行自定義的數據通信。

在web環(huán)境下,tomcat整合socket的主要的難處就是如何觸發(fā)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通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。