服务器端代码:
import java.net.* ; import java.io.* ; public class Main{ public static void main(String args[]) throws Exception { // 所有异常抛出 ServerSocket server = null ; // 定义ServerSocket类 Socket client = null ; // 表示客 户端 BufferedReader buf = null ; // 接收输入流 BufferedReader input = null; PrintStream out = null ; // 打印流输出最方便 input = new BufferedReader(new InputStreamReader(System.in)) ; server = new ServerSocket(8888) ; // 服务器在8888端口上监听 boolean f = true ; // 定义个标记位 while(f){ System.out.println("服务器运行,等待客户端连接。") ; client = server.accept() ; // 接收客户端连接 buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ; out = new PrintStream(client.getOutputStream()) ; boolean flag = true ; // 标志位,表示可以一直接收并回应信息 while(flag){ String str = buf.readLine() ; // 接收客户端发送的内容 System.out.println(str) ; // 回应信息 System.out.print("服务器端:"); String echo = input.readLine() ; out.println("服务器端: " + echo) ; if(echo==null||"".equals(echo)){ // 表示没有内容 flag = false ; // 退出循环 }else{ if("bye".equals(echo)){ // 如果输入的内容为bye表示结束 flag = false ; } } } client.close() ; } server.close() ; } };
客户端代码:
import java.net.* ; import java.io.* ; public class Main{ public static void main(String args[]) throws Exception { Socket client = null ; // 表示客户端 client = new Socket("localhost",8888) ;//请输入要连接的ip BufferedReader buf = null ; // 一次性接收完成 PrintStream out = null ; // 发送数据 BufferedReader input = null ; // 接收键盘数据 input = new BufferedReader(new InputStreamReader(System.in)) ; buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ; out = new PrintStream(client.getOutputStream()) ; boolean flag = true ; // 定义标志位 while(flag){ System.out.print("客户端: ") ; String str = input.readLine() ; // 接收键盘的输入信息 out.println("客户端 : "+str) ; if("bye".equals(str)){ flag = false ; }else{ String echo = buf.readLine() ; // 接收返回结果 System.out.println(echo) ; } } buf.close() ; client.close() ; } };
运行步骤及结果:
1.先运行服务器,等待客户端连接。
2.运行客户端,并且向服务器发消息,等待服务端回复。
3.服务端收到来自客户端的消息,并回复。
4.服务器端与客户端进行聊天。