java网络编程-可读写服务端
之前的服务端只管发数据,并没有对客户端的请求作出响应,这次我们对服务端进行改造,
接受客户端的请求,在请求的基础上加上hello,然后返回
import java.io.*; import java.net.ServerSocket; import java.net.Socket; //5 10 11 13 20 public class Server { public static void main(String[] args) throws Exception { System.out.println("==服务器的启动=="); // 1.注册端口 ServerSocket serverSocket = new ServerSocket(8888); while (true) { //2.每接收到客户端的连接,就新建一个线程进行处理 Socket socket = serverSocket.accept(); new ServerReadThread(socket).start(); System.out.println(socket.getRemoteSocketAddress() + "上线!"); } } static class ServerReadThread extends Thread { private Socket socket; public ServerReadThread(Socket socket) { this.socket = socket; } @Override public void run() { BufferedWriter writer=null; BufferedReader reader=null; try { writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //4.把字节输入流包装成自己需要的流进行数据的读取。 reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); //5.读到一行,加上hello,直接返回 String line; while ((line = reader.readLine()) != null) { System.out.println("收到:" + line); writer.write("hello,"+line+"\n"); writer.flush(); } } catch (IOException e) { System.out.println(socket.getRemoteSocketAddress() + "下线!"); }finally { try { writer.close(); reader.close(); socket.close(); } catch (IOException e) { System.err.println(e.getMessage()); } } } } }
客户端代码也进行了改造,从命令行读取数据,然后写入socket,再从socket读取数据,打印到屏幕
import java.io.*; import java.net.Socket; public class Client { public static void main(String[] args) { System.out.println("==客户端的启动=="); Socket socket = null; BufferedReader reader = null; BufferedWriter writer = null; BufferedReader consoleReader = null; try { socket=new Socket("127.0.0.1",8888); reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); consoleReader=new BufferedReader(new InputStreamReader(System.in)); while (true){ String line = consoleReader.readLine(); writer.write(line+"\n"); writer.flush(); String msg= reader.readLine(); System.out.println(msg); //客户端输入quit代表结束 if(line.equalsIgnoreCase("quit")){ break; } } } catch (IOException e) { System.err.println(e); }finally { try { writer.close(); socket.close(); System.out.println("关闭socket"); reader.close(); consoleReader.close(); } catch (IOException e) { System.err.println(e.getMessage()); } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
2019-02-28 impala学习笔记