最近在看网络编程这一块 小有收货 分享一哈 希望可以帮到有需要的人
编码开始
功能实现类如图
client :主要模拟客户端 发送消息
server :服务端
serverHandler :服务端业务处理类
Test :测试类
1:首先开始写 Server 服务端 (@SuppressWarnings("all") 防止提示 看着难受 )
@Slf4j @SuppressWarnings("all") public class Server { private static final int DEFAULT_PORT = 8888; private static ServerSocket serverSocket; public static void start(){ start(DEFAULT_PORT); } /** * socket 连接建立 * @param defaultPort defaultPort */ private synchronized static void start(int port) { if (serverSocket != null){ return; } try { //通过构造函数创建ServerSocket //如果端口合法且空闲,服务端就监听成功 serverSocket = new ServerSocket(port); log.info("服务端已启动,端口号:" + port); log.info("。。。。。。简易聊天室启动。。。。。。。"); //通过无线循环监听客户端连接 //如果没有客户端接入,将阻塞在accept操作上。 while (true) { Socket socket = serverSocket.accept(); new Thread(new ServerHandler(socket)).start(); } }catch (Exception e){ e.printStackTrace(); log.info("创建socket 异常"); }finally { if(serverSocket!=null){ try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); log.info("关闭socket 异常"); } serverSocket = null; } } } }
2:serverHandler 服务业务处理端
@Slf4j public class ServerHandler implements Runnable { /** * socket 连接 */ private Socket socket; ServerHandler(Socket socket) { this.socket = socket; } @Override public void run() { BufferedReader in = null; PrintWriter out = null; BufferedReader reader; try{ in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); reader = new BufferedReader(new InputStreamReader(System.in)); String result; String outPut; while ((result = in.readLine()) != null) { log.info(("client :" + result)); if(result.equals("exit")){ out.println("exit"); log.info("哇哈哈 聊天结束了!!!"); break; } outPut =reader.readLine(); out.println(outPut); } }catch (Exception e){ e.printStackTrace(); log.error("server 处理处理异常 "); }finally { if(out!=null){ out.close(); } if(in!=null){ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
3:编写我们的客户端
@Slf4j public class Client { private static final int DEFAULT_PORT = 8888; private static final String DEFAULT_IP = "127.0.0.1"; public static void send(){ send(DEFAULT_IP,DEFAULT_PORT); } /** * 发送 * @param ip defaultIp * @param port defaultPort */ private static void send(String ip, int port) { Socket socket = null; BufferedReader br = null; PrintWriter pw = null; BufferedReader reader; try{ socket = new Socket(ip,port); pw = new PrintWriter(socket.getOutputStream(),true); br = new BufferedReader(new InputStreamReader(socket.getInputStream())); reader = new BufferedReader(new InputStreamReader(System.in)); String input ; log.info("聊天开始。。。。。。输入exit即可关闭"); while ((input = reader.readLine())!=null){ pw.println(input); String s = br.readLine(); if(s.equals("exit")){ log.info("聊天终止。。。。。。"); break; } log.info(("server answer :" + s)); } }catch (Exception e){ log.error("创建连接失败:"+e.getLocalizedMessage()); }finally { if(socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } if(br!=null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if(pw!=null){ pw.close(); } } } }
4:编写测试类 进行测试
public class Test { public static void main(String[] args) throws InterruptedException { new Thread(() -> { Server.start(); }).start(); Thread.sleep(2000); new Thread(() ->{ Client.send(); }).start(); } }
界面运行效果如图
这样 简易聊天功能实现了
@Slf4j 这个注解 来自于lombok
pom依赖
<!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
idea 工具也是需要安装lombok插件的
我这里已经安装好了 这个插件 需要使用的话 必须要安装的
愿君度过美好的一天,明天加油