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