java监听服务器端口

使用Java的ServerSocket类可以监听服务器端口,通过accept()方法接收客户端连接请求。

Java实现服务器监听,接收并处理请求

在网络编程中,服务器监听是一个重要的环节,服务器需要监听客户端的连接请求,接收数据并将其传递给相应的处理程序,本文将介绍如何使用Java实现服务器监听,接收并处理请求。

java监听服务器端口

1、创建ServerSocket对象

我们需要创建一个ServerSocket对象,用于监听客户端的连接请求,ServerSocket类位于java.net包中,它的构造方法接受一个整数参数,表示端口号,我们可以创建一个监听8080端口的ServerSocket对象:

import java.net.ServerSocket; public class Server { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(8080); } catch (Exception e) { e.printStackTrace(); } } }

2、接收客户端连接

java监听服务器端口

当有客户端连接到服务器时,ServerSocket对象的accept()方法会返回一个新的Socket对象,用于与客户端通信,我们可以使用一个循环来不断接收新的客户端连接:

import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(8080); while (true) { Socket socket = serverSocket.accept(); // 处理客户端连接 } } catch (IOException e) { e.printStackTrace(); } finally { try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } }

3、处理客户端请求

当接收到客户端连接后,我们需要为每个客户端连接创建一个新的线程,以便并发处理多个客户端的请求,我们可以使用Thread类或Runnable接口来实现多线程:

java监听服务器端口

import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(8080); while (true) { Socket socket = serverSocket.accept(); new Thread(new ClientHandler(socket)).start(); } } catch (IOException e) { e.printStackTrace(); } finally { try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } }

ClientHandler类负责处理客户端的请求:

import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; import org.springframework.stereotype.Component; @Component("clientHandler") public class ClientHandler implements Runnable{ private AtomicInteger id=new AtomicInteger(0); private Socket socket; private PrintWriter writer; private BufferedReader reader; private String name; private ExecutorService pool=Executors.newCachedThreadPool(); @Override public void run(){ try{ //读取客户端信息 writer=new PrintWriter(socket.getOutputStream()); reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); name=(reader.readLine())==null?"":reader.readLine(); System.out.println("新用户"+name+"已上线!"); //向所有在线用户发送消息 pool.execute(new Runnable(){ @Override public void run(){ try{ writer=new PrintWriter(socket, true); }catch (Exception e){ e.printStackTrace(); }writer.println("欢迎"+name+"加入聊天室!"); }}); //获取用户输入的消息 while((msg=reader.readLine())!=null){ pool.execute(new Runnable(){ @Override public void run(){ try{ writer=new PrintWriter(socket, true); }catch (Exception e){ e.printStackTrace(); }writer.println("<>"+name+":"+msg); }}); }catch (Exception e){ e.printStackTrace(); }finally{ //关闭资源 try{ reader=null; writer=null; socket=null; }catch (Exception e){ e.printStackTrace(); }pool=null; } } } @Override public String toString(){ return "ClientHandler [id="+id+", name="+name+"]"; } } ``` 4. 关闭服务器和资源
0
评论