1、服务器端程序
package Socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class EchoServer { public static void main(String[] args) throws Exception { ServerSocket server =null;//定义ServerSocket对象 Socket client=null;//定义socket对象,表示客户端 PrintStream out=null;//声明打印流对象,以向客户端输出 BufferedReader buf = null;//用于接收客户端发来的信息 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()); //循环读取buf所有内容 boolean flag=true; while(flag){ String str=buf.readLine(); if(str==null||"".equals(str)){ flag=false;//结束循环 } else{ if("bye".equals(str)){ flag=false; } else { out.println("ECHO:"+str);//正常结束,向客户端回显信息 } } } out.close(); client.close(); } server.close(); } }
2、客户端程序
package Socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostException; public class EchoClient { public static void main(String[] args) throws Exception { Socket client=null;//声明Socket对象 client=new Socket("localhost",8888);//指定连接的主机和端口 BufferedReader buf=null;//接收服务器端发送回来的信息 PrintStream out=null;//输出流,向服务器端发送信息 BufferedReader input=null; input=new BufferedReader(new InputStreamReader(System.in));//从键盘接收数据 out = new PrintStream(client.getOutputStream());//向服务器端发送信息 buf= new BufferedReader(new InputStreamReader(client.getInputStream()));//接收服务器端输入信息 boolean flag=true; while(flag){ System.out.println("输入信息:"); String str=input.readLine();//从键盘接收数据 out.println(str); //向服务器端输入信息 if("bye".equals(str)){ //如果输入bye,结束操作 flag=false; } else{ String echo=buf.readLine();//接收ECHO信息 System.out.println(echo);//输出ECHO信息 } } client.close(); buf.close(); } }
效果如下:
此时,服务器每次只能有一个用户连接,属于单线程,要让多个用户连接服务器,要使用多线程...