📄 serverthread.java
字号:
import java.net.*;
import java.io.*;
import javax.swing.*;
/** 执行访问本地文件系统的服务器进程。
*/
public class ServerThread extends Thread {
/** 与当前进程所对应的服务器端Socket。
*/
private Socket socket=null;
/** 区分当前客户的请求:加载或存储。
*/
private int mode=0;
/**
*存贮当前对话框所对应的目录(当前目录)
*/
private static String path=null;
/**
* @param s 与当前进程所对应的服务器端Socket。
*/
public ServerThread(Socket s) {
socket=s;
}
public void run() {
super.run();
try{
int time=socket.getInputStream().read();
if(time==PhoneSimulator.initialAdd){
ServerThread.path= new BufferedReader(
new InputStreamReader(socket.getInputStream())).readLine();
// 得到对话框的当前目录
}
mode=socket.getInputStream().read();//从客户端读出用户的请求:读还是存盘
}
catch(IOException e){
System.err.println(e.getMessage());
}
//System.out.println("path received: "+path);
JFileChooser fileChooser= new JFileChooser(ServerThread.path);
if(mode==PhoneSimulator.savePhoneAdd){//客户端想存盘
fileChooser.setDialogTitle("保存地址簿");
int returnValue=fileChooser.showSaveDialog(null);
if(returnValue==JFileChooser.APPROVE_OPTION){//同意存盘
try{
ServerThread.path=fileChooser.getCurrentDirectory().getPath();
// 更新路径
socket.getOutputStream().write(PhoneAddServer.Approved_Operation);
//向客户端确认用户已经选了存盘
String inLine;
BufferedReader in=new BufferedReader(
new InputStreamReader(socket.getInputStream()));
BufferedWriter out=new BufferedWriter(
new FileWriter(fileChooser.getSelectedFile()));
while((inLine=in.readLine())!=null){
System.out.println(inLine);
out.write(inLine);
out.newLine();
}
out.flush();
out.close();
in.close();
socket.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
else{//用户选了cancel拒绝存盘
try{
socket.getOutputStream().write(PhoneAddServer.Cancel_Operation);
}
catch(IOException e){
System.err.println(e.getMessage());
}
}
}
else{//用户想读盘
fileChooser.setDialogTitle("加载地址簿");
int returnValue=fileChooser.showOpenDialog(null);
if(returnValue==JFileChooser.APPROVE_OPTION){//同意读盘
try{
ServerThread.path=fileChooser.getCurrentDirectory().getPath();
// 更新路径
socket.getOutputStream().write(PhoneAddServer.Approved_Operation);
//向客户端确认用户已经选了读盘
String inLine;
BufferedReader in=new BufferedReader(
new FileReader(fileChooser.getSelectedFile()));//从文件中读出来
BufferedWriter out=new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));//写入客户端
while((inLine=in.readLine())!=null){
System.out.println(inLine);
out.write(inLine);
out.newLine();
}
out.flush();
out.close();
in.close();
socket.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
else{//用户选了cancel拒绝读盘
try{
socket.getOutputStream().write(PhoneAddServer.Cancel_Operation);
}
catch(IOException e){
System.err.println(e.getMessage());
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -