• 注册
  • 经验分享 经验分享 关注:4 内容:15179

    java监听服务器端口

  • 查看作者
  • 打赏作者
  • Lv.10
    封号会员
    使用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. 关闭服务器和资源

    请登录之后再进行评论

    登录
  • 快速发布
  • 任务
  • 实时动态
  • 偏好设置
  • 帖子间隔 侧栏位置: