📄 cibcserver.java
字号:
//CIBC服务器
import java.io.*;
import java.net.*;
import java.util.*;
class CIBCthread extends Thread{
public CIBCthread(Socket s,Socket cibc,Csm c){
this.s=s;
this.cibc=cibc;
this.c=c;
}
public void run(){
try{
Vector v = new Vector(); //创建一个集合类,保存数据
RandomAccessFile raf = new RandomAccessFile("e:\\CIBC.dat", "rw"); //加载数据
try{
do{
String id = raf.readUTF();
String password = raf.readUTF();
double money = raf.readDouble();
String name = raf.readUTF();
Csm c = new Csm(id,password,money,name);
v.add(c);
}while(true);
}
catch(EOFException eof){
}
raf.close();
InputStream isatm=s.getInputStream(); //ATM客户机的输入流
BufferedReader bratm=new BufferedReader(new InputStreamReader(isatm));
OutputStream osatm=s.getOutputStream(); //向ATM客户机的输出流
PrintWriter outatm=new PrintWriter(osatm,true);
OutputStream oscch=cibc.getOutputStream(); //向CCH总行的输出流
PrintWriter outcch=new PrintWriter(oscch,true);
String latm=null; //接收ATM输入
String idatm=null; //接收ATM用户名
String psdatm=null; //接收ATM密码
String ltd=null;
boolean stopFlag=false;
int pos=-1;
while(!stopFlag){
latm=bratm.readLine(); //检查ID
if(latm.startsWith("t")){
InetAddress iatd=InetAddress.getLocalHost();
int portd=3333;
Socket std=new Socket(iatd,portd); //连接TD服务器
InputStream istd=std.getInputStream(); //TD支行的输入流
BufferedReader brtd=new BufferedReader(new InputStreamReader(istd));
OutputStream ostd=std.getOutputStream(); //向TD支行的输出流
PrintWriter outtd=new PrintWriter(ostd,true);
outtd.println("CIBC-ATM");
if((brtd.readLine()).equals("start")){
outtd.println(latm);
while(!stopFlag){
ltd=brtd.readLine(); //接收TD的输入数据
outatm.println(ltd);
latm=bratm.readLine();
if((latm.equals("ok"))||(latm.equals("error"))){
stopFlag=true;
break;
}
outtd.println(latm);
}
while(stopFlag){
outtd.println(latm);
ltd=brtd.readLine();
outatm.println(ltd);
if((ltd.substring(0,2)).equals("04")){
break;
}
latm=bratm.readLine();
}
}
}
else{
for(int index=0; index<v.size(); index++){
Csm c = (Csm)v.get(index);
String str=c.getID();
if(str.equals(latm)){
pos = index;
break;
}
}
if(pos==-1){
outatm.println("error");
}
else{ //查找到该ID
c = (Csm)v.get(pos); //将该ID信息传给c
outatm.println("ok");
stopFlag=true;
}
}
}
while(stopFlag){
psdatm=bratm.readLine(); //检查密码
if(psdatm.equals(c.getPassword())){
outatm.println("ok");
while((latm=bratm.readLine())!=null){
if(latm.substring(0,2).equals("01")){ //存款
m=c.getMoney()+Double.parseDouble(latm.substring(2));
c.setMoney(m);
outatm.println("01");
outcch.println(latm); //向CCH总行
}
else if(latm.substring(0,2).equals("02")){ //取款
m=c.getMoney()-Double.parseDouble(latm.substring(2));
c.setMoney(m);
outatm.println("02");
outcch.println(latm); //向CCH总行
}
else if(latm.substring(0,2).equals("03")){ //查询余额
outatm.println(c.getMoney());
}
else if(latm.substring(0,2).equals("04")){ //退出
outatm.println("04");
RandomAccessFile raf2 = new RandomAccessFile("e:\\CIBC.dat", "rw"); //保存数据
Csm c = (Csm)v.get(pos);
raf2.writeUTF(c.getID());
raf2.writeUTF(c.getPassword());
raf2.writeDouble(c.getMoney());
raf2.writeUTF(c.getName());
raf2.close();
break;
}
else{
outatm.println("00");
}
}
}
else{
outatm.println("error");
}
}
s.close();
outatm.close();
osatm.close();
bratm.close();
isatm.close();
}
catch(Exception e){
}
}
private Csm c=null;
private Socket cibc=null;
private Socket s=null;
private double m=0;
}
public class CIBCServer{
public static void main(String[] args)throws Exception{
InetAddress ia=InetAddress.getLocalHost();
int port=1111;
Socket cibc=new Socket(ia,port); //连接CCH服务器
OutputStream osc=cibc.getOutputStream();
PrintWriter outc=new PrintWriter(osc,true);
String lcch=null;
outc.println("01"); //向总行报到
ServerSocket CIBC=new ServerSocket(2222); //CIBC服务器端口
boolean stopFlag=false;
while(!stopFlag){
System.out.println("CIBC服务器已启动...");
Socket s=CIBC.accept(); //等待ATM客户
Csm c=new Csm();
InputStream isatm=s.getInputStream();
BufferedReader bratm=new BufferedReader(new InputStreamReader(isatm));
String latm=null;
OutputStream osatm=s.getOutputStream();
PrintWriter outatm=new PrintWriter(osatm,true);
latm=bratm.readLine();
if(latm.equals("CIBC-ATM")){ //接收ATM的报到
System.out.println("CIBC-ATM启动");
outatm.println("start"); //返回给ATM
}
else if(latm.equals("TD-ATM")){
System.out.println("TD-ATM启动");
outatm.println("start");
}
CIBCthread CI=new CIBCthread(s,cibc,c); //启动一个线程
CI.start();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -