Java实现服务器监听,接收并处理请求
创新互联一直通过网站建设和网站营销帮助企业获得更多客户资源。 以"深度挖掘,量身打造,注重实效"的一站式服务,以网站建设、成都做网站、移动互联产品、成都全网营销服务为核心业务。10多年网站制作的经验,使用新网站建设技术,全新开发出的标准网站,不但价格便宜而且实用、灵活,特别适合中小公司网站制作。网站管理系统简单易用,维护方便,您可以完全操作网站资料,是中小公司快速网站建设的选择。
在网络编程中,服务器监听是一个重要的环节,服务器需要监听客户端的连接请求,接收数据并将其传递给相应的处理程序,本文将介绍如何使用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、接收客户端连接
当有客户端连接到服务器时,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接口来实现多线程:
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. 关闭服务器和资源
文章名称:java监听服务器端口
当前链接:http://www.csdahua.cn/qtweb/news42/256742.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网