-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsyncClient.java
More file actions
147 lines (113 loc) · 3.68 KB
/
syncClient.java
File metadata and controls
147 lines (113 loc) · 3.68 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
145
146
147
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Vector;
public class syncClient {
private static String serverIP;
private static int PORT_NUMBER;
private static final String DONE = "DONE";
private static Socket socket;
private static ObjectInputStream in;
private static ObjectOutputStream out;
private static int fileCount = 0;
private static String baseDir;
private static double lastModified;
public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException {
baseDir = "./cos332Client";
serverIP = "localhost";
PORT_NUMBER = 8001;
File fBaseDir = new File(baseDir);
Boolean baseDirExists = fBaseDir.exists();
if(!baseDirExists)
{
fBaseDir.mkdir();
}
System.out.println("Client running!");
System.out.println("Dir to sync: " + baseDir);
ArrayList<File> files = new ArrayList<File>(Arrays.asList(fBaseDir.listFiles()));
System.out.println("Files in directory: ");
for(int i=0;i<files.size();i++)
{
System.out.println(files.get(i).getName());
}
System.out.println("Server IP: " + serverIP+":"+PORT_NUMBER);
socket = new Socket(serverIP, PORT_NUMBER);
out = new ObjectOutputStream(socket.getOutputStream());
lastModified = fBaseDir.lastModified();
out.writeObject(lastModified);
out.flush();
in = new ObjectInputStream(socket.getInputStream());
System.out.print("Syncing");
String syncCommand = (String) in.readObject();
if(syncCommand.equals("send"))//client is newer
{
System.out.println("updating server");
out.writeObject(files);
for(int i=0;i<files.size();i++)
{
byte[] buff = new byte[socket.getSendBufferSize()];
int bytesRead = 0;
InputStream inputStream = new FileInputStream(files.get(i));
while((bytesRead = in.read(buff))>0) {
out.write(buff,0,bytesRead);
}
inputStream.close();
out.flush();
}
//out.writeObject(files);
}
else //server is newer
{
out.writeObject(true);
System.out.println("updating client");
files = new ArrayList<File>();
}
System.out.println();
System.out.println("Finished sync");
out.close();
in.close();
socket.close();
}
private static void sendFile(File Dir) throws Exception {
byte[] buff = new byte[socket.getSendBufferSize()];
int bytesRead = 0;
InputStream istream = new FileInputStream(Dir);
while((bytesRead = istream.read(buff))>0) {
out.write(buff,0,bytesRead);
}
istream.close();
out.flush();
in.close();
out.close();
socket.close();
socket = new Socket(serverIP, PORT_NUMBER);
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
}
private static void receiveFile(File Dir) throws Exception {
FileOutputStream wr = new FileOutputStream(Dir);
byte[] outBuffer = new byte[socket.getReceiveBufferSize()];
int bytesReceived = 0;
while((bytesReceived = in.read(outBuffer))>0) {
wr.write(outBuffer,0,bytesReceived);
}
wr.flush();
wr.close();
in.close();
out.close();
socket.close();
socket = new Socket(serverIP, PORT_NUMBER);
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
}
}