我们要实现的具体功能是:
利用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();
}
}
}