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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java socket建立长连接_Java Web项目中使用Socket通信多线程、长连接的方法

發布時間:2025/3/11 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java socket建立长连接_Java Web项目中使用Socket通信多线程、长连接的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

先看一下web的監聽代碼:

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();

}

}

}

創建線程:

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();

}

}

}

處理接受到的數據:

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;

}

}

客戶端代碼:

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通信多線程、長連接的方法,希望對大家有所幫助!

總結

以上是生活随笔為你收集整理的java socket建立长连接_Java Web项目中使用Socket通信多线程、长连接的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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