forked from YiDaoCai/RemoteDesktop
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathServer.java
More file actions
144 lines (128 loc) · 4.11 KB
/
Server.java
File metadata and controls
144 lines (128 loc) · 4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package DesktopServerProcess;
//教师端接收文件,以及教师端程序main函数
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import CommonClass.DesktopRemoteType;
import DesktopServerUI.ServerMainFrame;
public class Server {
private final String SelfAddress;
private final String HostName;
private int port;
private ServerSocket server;
private ServerSocket fileserver;
private static String name = "Server";
public Server(DesktopRemoteType type) throws IOException {
InetAddress ia = null;
try {
ia = InetAddress.getLocalHost();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.HostName = ia.getHostName();
this.SelfAddress = ia.getHostAddress();
port = type.getPort();
server = new ServerSocket(port, 30);
fileserver = new ServerSocket(DesktopRemoteType.ServerFile.getPort(),
30);
new Thread(new openSocket()).start();
new Thread(new Runnable() {
@Override
public synchronized void run() {
// TODO Auto-generated method stub
Socket client;
DataInputStream inputStream = null;
DataInputStream getMessageStream = null;
while (true) {
try {
client = fileserver.accept();
getMessageStream = new DataInputStream(new BufferedInputStream(client.getInputStream()));
inputStream = getMessageStream;
String savePath = "D:\\receive\\";
File path = new File(savePath);
path.mkdir();
int bufferSize = 8192;
byte[] buf = new byte[bufferSize];
int passedlen = 0;
long len = 0;
savePath += client.getInetAddress().getHostAddress();
String filename = inputStream.readUTF();
savePath += " - " + filename;
DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath))));
len = inputStream.readLong();
System.out.println("文件的长度为:" + len + "\n");
System.out.println("开始接收文件!" + "\n");
while (true) {
int read = 0;
if (inputStream != null) {
read = inputStream.read(buf);
}
passedlen += read;
if (read <= 0) {
break;
}
// 下面进度条本为图形界面的prograssBar做的,这里如果是打文件,可能会重复打印出一些相同的百分比
System.out.println("文件接收了" + (passedlen * 100 / len) + "%\n");
fileOut.write(buf, 0, read);
}
System.out.println("接收完成,文件存为" + savePath + "\n");
ServerMainFrame.getFrame().addSession("收到文件 \"" + filename + "\"");
fileOut.close();
inputStream.close();
getMessageStream.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
/**
* @return 打开Socket通信
* @throws IOException
*/
public class openSocket implements Runnable {
@Override
public void run() {
while (true) {
ServerThread conn;
// Socket ss;
try {
conn = new ServerThread(server.accept());
ServerThread.addUserList(conn.getSocket().getInetAddress()
.getHostAddress(), conn);
conn.listen(true);
// ss = fileserver.accept();
// ServerThread.getServerThread(ss.getInetAddress()).setFileSocket(ss);
// System.out.println("Server : " + conn);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public String getHostName() {
return HostName;
}
public String getSelfAddress() {
return SelfAddress;
}
public static void main(String[] args) throws Exception {
ServerMainFrame.getFrame();
new Server(DesktopRemoteType.OtherType);
ServerShotHandler.getThread().start();
}
public static String getName() {
return name;
}
public static void setName(String name) {
Server.name = name;
}
}