我们要实现的具体功能是:
利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。
客户端向服务器端发送Time命令,服务器端接受到该字符串后将服务器端当前时间返回给客户端;客户端向服务器端发送Exit命令,服务器端向客户端返回“Bye”后退出。
题目比较简单的,我们直接来看代码吧:
首先是服务器端的实现:
import java.net.ServerSocket; import java.net.Socket; import java.io.*; import java.text.DateFormat; import java.util.Date;//时间 //import java.util.Calendar; public class Server { public static void main(String args[]){ try{ ServerSocket server = new ServerSocket(11111);//创建服务器套接字 System.out.println("服务器启动完毕"); System.out.println("等待客户端连接..."); Socket socket = server.accept();//等待客户端连接 BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));//获得客户端的输入流 //OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());//获得客户端输出流 PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);//获得客户端输出流) if(socket.isConnected()){ System.out.println("客户端名称为"+socket.getInetAddress().getHostAddress()+" 连接成功!"); //out.write("连接成功/n"); out.println("连接成功"); } while(true){ String str = reader.readLine(); if(str.equals("Time")){//客户端请求时间数据 Date date = new Date(); // Calendar cal = Calendar.getInstance(); System.out.println("客户端请求当前时间"); DateFormat format = DateFormat.getDateInstance(); //out.write(format.format(date));//格式化输出时间 out.println(format.format(date)); } else if(str.equals("exit")){//退出 //out.write("bye"); out.println("bye"); System.out.println("连接断开"); break; } else{ System.out.println("数据:"+str); } } }catch(IOException e){ e.printStackTrace(); } } }
配置好服务器端后,我们继续来编写客户端的程序:
import java.net.Socket; import java.io.*; public class Client { public static void main(String args[]){ try{ Socket client = new Socket("localhost",11111);//创建客户端套接字 OutputStream out = client.getOutputStream();//获取输出流 BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));//获取输入流 获得服务器返回的数据 BufferedReader localMessage = new BufferedReader(new InputStreamReader(System.in));//接受客户端从键盘输入的信息 System.out.println("从服务器"+client.getRemoteSocketAddress()+"返回的消息:"+reader.readLine()); while(true){//从客户端向服务器传输数据 String message,str; message = localMessage.readLine()+"/n";//从屏幕读取一行数据 //System.out.print(message); out.write(message.getBytes());//传输给服务器 str = reader.readLine(); System.out.println("从服务器"+client.getRemoteSocketAddress()+"返回的消息:"+str); if(str.equals("Bye")){//服务器传回 结束 数据 System.out.println("连接断开!"); break; } } }catch(IOException e){ e.printStackTrace(); } } }