服务器
package com.test; import java.io.IOException; import java.net.*; import java.io.*; public class MyServer { public static void main(String[] args) { // TODO Auto-generated method stub MyServer ms = new MyServer(); } public MyServer(){ try { //服务器用ServerSocket对象创建 参数代表的是在9999端口上监听 System.out.println("服务器在9999端口等待监听..."); ServerSocket ss = new ServerSocket(9999); //等待监听 accept() 方法返回的是Socket对象 Socket s = ss.accept(); //接收客户端输入的数据 InputStreamReader isr =new InputStreamReader(s.getInputStream()); BufferedReader br = new BufferedReader(isr); //接收控制台输入的数据 InputStreamReader isr2 =new InputStreamReader(System.in); BufferedReader br2 = new BufferedReader(isr2); //想客户端写入输出流 PrintWriter pw = new PrintWriter(s.getOutputStream(),true); while(true){ String infoFromClient = br.readLine(); if(infoFromClient.equals("exit")) { System.out.println("结束对话!"); s.close(); break; } System.out.println("客户端说:"+infoFromClient); System.out.println("请输入您想对客户端说的话:"); String info = br2.readLine(); pw.println(info); } } catch (IOException e) { e.printStackTrace(); } } }
客户端
package com.test; import java.net.*; import java.io.*; public class MyClient { public static void main(String[] args) { // TODO Auto-generated method stub MyClient mc = new MyClient(); } public MyClient(){ try { //创建客户端连接通道对象 第一个参数表示连接服务器的ip 第2个参数表示连接哪个端口 Socket s = new Socket("127.0.0.1",9999); //向服务器发送数据 创建写对象 向通道对象的输出流写入数据 true代表及时刷新数据 PrintWriter pw = new PrintWriter(s.getOutputStream(),true); //创建一个输入流 接收从控制台输入的数据 InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); InputStreamReader isr2 = new InputStreamReader(s.getInputStream()); BufferedReader br2 = new BufferedReader(isr2); while(true){ System.out.println("请输入您想对服务器说的话:"); String infoFromControl = br.readLine(); pw.println(infoFromControl); if(infoFromControl.equals("exit")) { System.out.println("对话结束!"); s.close(); break; } String info = br2.readLine(); System.out.println("服务器说:"+info); } } catch (Exception e) { e.printStackTrace(); } } }
需要注意的地方是,当退出对话判断客户端判断要在想服务端发送数据后判断 不然 服务器没接收到 客户端就关闭了 在这里从两个地方读取数据流 一个是s通道 另一个从控制台读取数据流
时间: 2024-10-14 05:10:17