最近有个同学做毕业设计,导师要求要模拟一个客户/服务器结构实现一个中间件。
网上找了一下资料,感觉也不是很难,这次就用java标准输入输出流模拟了一下。有时间的话可以再用nio或系统API实现一个客户/服务器的结构。
把代码贴一下,做个参考吧:
先是服务器端(Server.class):
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private static final int DEFAULT_PORT=10001;
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
Server server=new Server();
server.start();
}catch(Exception e){
e.printStackTrace();
}
}
private Socket client;
private BufferedReader in;
private BufferedWriter out;
private int port=DEFAULT_PORT;
private String receviceStr;
private ServerSocket server;
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public void start() throws Exception{
this.server=new ServerSocket(port);
this.client=server.accept();
in=new BufferedReader(new InputStreamReader(
client.getInputStream()));
out=new BufferedWriter(new OutputStreamWriter(
client.getOutputStream()));
System.out.println("server is started!");
while(true){
receviceStr=in.readLine();
System.out.println("New Message:");
System.out.println(receviceStr);
System.out.println("=========================================");
responseClient();
out.flush();
if(receviceStr.equals("end"))
break;
}
}
private void responseClient()throws IOException{
//向服务器发送消息
PrintWriter out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(client.getOutputStream())),true);
out.println("server message");
}
}
然后是客户端(Client.class):
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Client {
private static final int DEFAULT_PORT=10001;
private static final String DEFAULT_IP="127.0.0.1";
public static void main(String[] args) {
// TODO Auto-generated method stub
Client client=new Client();
try{
client.start();
}catch(Exception e){
e.printStackTrace();
}
}
private Socket client;
private BufferedReader in;
private String ipAddress=DEFAULT_IP;
private int port=DEFAULT_PORT;
public String getIpAddress() {
return ipAddress;
}
public int getPort() {
return port;
}
public void setIpAddress(String ipAddress) {
this.ipAddress = ipAddress;
}
public void setPort(int port) {
this.port = port;
}
public void start() throws Exception{
this.client=new Socket(ipAddress,port);
in=new BufferedReader(new InputStreamReader(
client.getInputStream()));
PrintWriter out=new
PrintWriter(client.getOutputStream());
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String str=line.readLine();
out.println(str);
out.flush();
receiveResponse();
if(str.equals("end"))
break;
}
}
private void receiveResponse()throws IOException{
BufferedReader br = new BufferedReader(
new InputStreamReader(client.getInputStream()));
String msg = br.readLine();
System.out.println(msg);
}
}
下面是程序运行结果,左边是服务器端(Server),右边是客户端(Client):
1.
2.