package com.mtools.core.plugin.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerMain {
public static void main(String[] args) {
class SocketThread extends Thread{
private Socket socket;
private byte[] buf;
private int len = 0;
public SocketThread(Socket socket) {
this.socket = socket;
buf = new byte[1024];
}
@Override
public void run() {
try {
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//String command = dis.readUTF();
len = dis.read(buf);
String command = new String(buf,0,len);
System.out.println("command=="+command);
String[] temp =command.split(" ");
command = temp[0]; //命令 是put还是get
String filename = temp[1]; //文件名
File file = new File("C:\\",filename);//假设放在C盘
if(command.equals("get")){
if(!file.exists()){
//dos.writeUTF("notexists");
dos.write("notexists".getBytes());
dos.flush();
System.out.println("没有这个文件,无法提供下载!");
dis.close();
dos.close();
socket.close();
return;
}
//dos.writeUTF("DownloadReady "+file.length());
dos.write("准备下载".getBytes());
dos.flush();
System.out.println("正在接受文件下载...");
DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
while ((len = fis.read(buf))!= -1) {
dos.write(buf, 0, len);
}
dos.flush();
fis.close();
System.out.println("文件传输完成");
}
else {
//dos.writeUTF("UploadReady");
dos.write("UploadReady".getBytes());
dos.flush();
System.out.println("正在接受文件上传...");
DataOutputStream fileOut =
new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
while ((len = dis.read(buf))!=-1) {
fileOut.write(buf, 0, len);
}
System.out.println("上传完毕!");
fileOut.close();
}
dis.close();
dos.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.out.println("等待客户端连接....");
int index = 0;
try {
ServerSocket server = new ServerSocket(9527,300); //端口号9527 允许最大连接数300
while (true) {
Socket socket = server.accept();
System.out.println("收到第"+(++index)+"个连接");
new SocketThread(socket).start(); //对每个连接创建一个线程
}
} catch (Exception e) {
e.printStackTrace();
}
}
}