The Java Web project USES the Socket communication multithreaded long connected method

  • 2020-05-09 18:37:49
  • OfStack

Many times in the javaweb project we need to use Socket communication to achieve the function. In the web project we need to use Socket to set up a listener. When the program starts, we need to start socket listener. Our application scenario is in the java project, which requires an external hardware device, such as a device, to communicate through tcp, obtain the data transmitted by the device, and respond to the data.

Take a look at the listening code of 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) 
{ 
// New thread class  
socketThread=new SocketThread(null); 
// Starting a thread  
socketThread.start(); 
} 
} 
}

Create thread:


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 create socket Service error "); 
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()){ 
// Process the received data  
Thread t = new Thread(new SocketOperate(socket)); 
t.start(); 
}else{
break;
}
}catch (Exception e) { 
System.out.println("SocketThread create socket Service error "); 
e.printStackTrace(); 
} 
} 
} 
public void closeSocketServer(){ 
try { 
if(null!=serverSocket && !serverSocket.isClosed()) 
{ 
serverSocket.close(); 
} 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
} 
}

Processing received data:


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; 
// What the thread handles Socket The corresponding input stream  
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 
{ 
//  Use a continuous loop from Socket To read the data sent by the client  
while (true) 
{ 
content = readFromClient(); 
System.out.println(content);
if (content == null) 
{ 
break; 
} 
OutputStream os = socket.getOutputStream(); 
os.write(("RES, OK,< As a , Xiao Ming >, ,#" + "\n").getBytes("utf-")); 
os.flush();
} 
} 
catch (IOException e) 
{ 
e.printStackTrace(); 
} 
} 
// Defines a way to read client data  
private String readFromClient() 
{ 
try 
{ 
str = br.readLine(); 
return str; 
} 
// If an exception is caught, it should be Socket The corresponding client has been closed  
catch (IOException e) 
{ 
try {
br.close();
reader.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 
} 
return null; 
} 
}

Client code:


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++;
} 
// Continue to cycle 
os.close(); // Shut down Socket The output stream 
is.close(); // Shut down Socket The input stream 
socket.close(); // Shut down Socket
}
}

The above is the site to introduce you Java Web project using Socket communication multi-threaded, long connection method, I hope to help you!


Related articles: