一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java Web項目中使用Socket通信多線程、長連接的方法

Java Web項目中使用Socket通信多線程、長連接的方法

2020-04-21 11:45程序員 JAVA教程

很多時候在javaweb項目中我們需要用到Socket通信來實現功能,在web中使用Socket我們需要建立一個監聽程序,在程序啟動時,啟動socket監聽。接下來通過本文給大家介紹Java Web項目中使用Socket通信多線程、長連接的方法,感興趣的朋友

很多時候在javaweb項目中我們需要用到Socket通信來實現功能,在web中使用Socket我們需要建立一個監聽程序,在程序啟動時,啟動socket監聽。我們的應用場景是在java項目中,需要外接如一個硬件設備,通過tcp通信,獲取設備傳上來的數據,并對數據做回應。

先看一下web的監聽代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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();
}
}
@Override
public void contextInitialized(ServletContextEvent arg) {
// TODO Auto-generated method stub
if(null==socketThread)
{
//新建線程類
socketThread=new SocketThread(null);
//啟動線程
socketThread.start();
}
}
}

創建線程:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.io.IOException;
import java.net.ServerSocket;
import java.net.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();
}
}
}

處理接受到的數據:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.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);
}
@Override
public 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 block
e.printStackTrace();
}
}
return null;
}
}

客戶端代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package
import java.io.*;
import java.net.*;
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通信多線程、長連接的方法,希望對大家有所幫助!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青青青久久国产片免费精品 | 草草影院永久在线观看 | 羞羞视频麻豆 | 好大用力深一点女公交车 | 美国艳星lisann成人作品 | 韩国最新理论片奇忧影院 | 午夜欧美精品久久久久久久久 | 成人国产在线播放 | 国产精品馆 | 精选国产AV精选一区二区三区 | 亚洲福利视频在线观看 | 操大爷影院 | 日本欧美大码a在线视频播放 | 国产午夜精品理论片 | 国产综合久久久久久 | 国产亚洲玖玖玖在线观看 | 亚洲网站大全 | 日韩aaa| 911精品国产亚洲日本美国韩国 | 久青草国产在视频在线观看 | 校园肉文高h | 亚洲国产成人精品无码区5566 | freesex性欧美炮机喷潮 | 日本色播 | 久久九九亚洲精品 | xxxxxx日本处大片免费看 | 深夜影院深a久久 | 日本草草视频在线观看 | 欧美ⅹxxxx视频 | 99久久999久久久综合精品涩 | 99精品免费视频 | 手机在线免费观看视频 | 荡娃艳妇有声小说 | 欧美成人tv | 996热在线视频 | 精品视频免费在线 | 青青青国产在线观看 | 亚洲成人网页 | 国产精品林美惠子在线观看 | 国产91精品露脸国语对白 | ferr孕妇videos毛茸茸 |