📄 commandreceiver.java
字号:
package cmd;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetAddress;
import java.util.Vector;
import java.io.*;
import ftpclient.Myftp;
import java.util.StringTokenizer;
import java.util.ArrayList;
public final class CommandReceiver {
private String[] args;
private CommandArgument a;
private Socket s,dataSocket;
private PrintWriter out,dataOut;
private BufferedReader in,dataIn;
public static Vector filesname = new Vector();
public static Vector filesInfo = new Vector();
private static CommandReceiver cr = new CommandReceiver();
private ServerSocket serverDataSocket;
private static String currentDir="./";
private CommandReceiver() {
args = new String[2];
}
public static CommandReceiver getHandle() {
return cr;
}
public void setCommandArgument(CommandArgument a) {
this.a = a;
}
public void methConnect() {
args = a.getArguments();
try{
s = new Socket(args[0],Integer.parseInt(args[1]));
out = new PrintWriter(s.getOutputStream());
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
}catch(Exception e){
MessageManager.inforPane.append("与服务器连接超时!");
}
getMsgs();
}
public void methUser(){
args = a.getArguments();
if(out!=null){
out.println("USER " + args[0]);
out.flush();
}
}
public void methPass(){
args=a.getArguments();
if(out!=null){
out.println("PASS " + args[0]);
out.flush();
}
}
public void methList(){
args = a.getArguments();
methPort();
try{
out.println("List");
out.flush();
dataSocket=serverDataSocket.accept();
serverDataSocket.close();
dataIn = new BufferedReader(new InputStreamReader(dataSocket.getInputStream()));
// 读取目录信息
String ss;
while ((ss=dataIn.readLine()) != null) {
//filesname.add(ss);
ArrayList infos = new ArrayList();
StringTokenizer st = new StringTokenizer(ss);
while (st.hasMoreTokens()) {
infos.add(st.nextToken());
}
filesInfo.add(infos);
filesname.add(infos.get(infos.size()-1));
}
dataIn.close();
dataSocket.close();
}catch(Exception exc){
}
}
public void methQuit(){
out.println("QUIT");
try{
out.close();
dataOut.close();
in.close();
dataIn.close();
s.close();
dataSocket.close();
}catch(Exception e){
}
MessageManager.inforPane.append("与服务器连接已断开!\n");
}
public String methGetIp(){
String cmd="";
try {
// 得到自己的地址
byte[] address = InetAddress.getLocalHost().getAddress();
// 用适当的端口号构造服务器
serverDataSocket = new ServerSocket(0, 1);
serverDataSocket.setSoTimeout(10000);
// 准备传送PORT命令用的数据
for (int i = 0; i < 4; ++i)
cmd = cmd + (address[i] & 0xff) + ",";
cmd = cmd + ( ( (serverDataSocket.getLocalPort()) / 256) & 0xff)
+ ","
+ (serverDataSocket.getLocalPort() & 0xff);
}
catch (Exception e) {
//MessageManager.inforPane.append("与服务器连接超时!\n");
}
return cmd;
}
public void methPort(){
String cmd="PORT ";
try {
out.println(cmd+methGetIp());
out.flush();
}
catch (Exception e) {
//MessageManager.inforPane.append("与服务器连接超时!\n");
}
}
public void methGet() {
args = a.getArguments();
String fileName = args[0];
try {
methPort();
out.println("Retr "+args[0]);
out.flush();
dataSocket=serverDataSocket.accept();
serverDataSocket.close();
InputStream dataIn = dataSocket.getInputStream();
int n;
byte[] buffer = new byte[1024];
// 在客户端上准备接收用的文件
RandomAccessFile raf=new RandomAccessFile(fileName,"rw");
while (dataIn.read(buffer)!=-1) {
raf.write(buffer);
}
MessageManager.inforPane.append("文件下载完毕!\n");
raf.close();
dataIn.close();
dataSocket.close();
}
catch (Exception e) {
//e.printStackTrace();
MessageManager.inforPane.append("接收文件出错!\n");
}
getMsgs();
}
public void getMsgs() {
try {
CtrlListen listener = new CtrlListen(in);
Thread listenerthread = new Thread(listener);
listenerthread.start();
}
catch (Exception e) {
//e.printStackTrace();
MessageManager.inforPane.append("网络连接出错!");
}
}
public void methCwd() {
args = a.getArguments();
try {
out.println("CWD "+args[0]); // CWD命令
out.flush();
filesname.removeAllElements();
filesname.trimToSize();
}
catch (Exception e) {
}
}
public void methPut() {
args = a.getArguments();
String fileName = args[0];
try {
int n;
byte[] buff = new byte[1024] ;
RandomAccessFile raf=null;
// 准备读出客户端上的文件
try {
raf = new RandomAccessFile(fileName,"rw");
}
catch (Exception e) {
System.out.println("文件不存在!");
MessageManager.inforPane.append("文件不存在!");
return;
}
// 准备发送数据的流
methPort();
out.println("Stor "+args[0]);
out.flush();
dataSocket=serverDataSocket.accept();
OutputStream outstr = dataSocket.getOutputStream();
// 读出文件,并利用网络发送给服务器
byte[]buffer =new byte[1024];
while (raf.read(buff)!=-1) {
outstr.write(buff);
}
MessageManager.inforPane.append("传送文件成功!");
dataSocket.close();
raf.close();
}
catch (Exception e) {
e.printStackTrace();
MessageManager.inforPane.append("传送文件失败!");
}
}
}
class CtrlListen
implements Runnable {
BufferedReader ctrlInput = null;
static boolean first=true;
// 构造器 指定读取地址
public CtrlListen(BufferedReader in) {
ctrlInput = in;
}
public void run() {
while (true) {
try { // 按行读入并输出到标准输出上
MessageManager.inforPane.append(ctrlInput.readLine()+"\n");
}
catch (Exception e) {
first=false;
if(!first){
//MessageManager.inforPane.append("与服务器连接断开!");
break;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -