diff --git a/cs654/proj1/FileServer.java b/cs654/proj1/FileServer.java index 77cf6f5..1378e8e 100644 --- a/cs654/proj1/FileServer.java +++ b/cs654/proj1/FileServer.java @@ -8,11 +8,14 @@ public class FileServer implements Runnable private int m_port; private String m_rootPath; private ServerSocket m_serverSocket; + private char m_pathSeparator = '/'; public FileServer(int port, String rootPath) { m_port = port; m_rootPath = rootPath; + if (rootPath.indexOf('\\') >= 0) + m_pathSeparator = '\\'; } public void run() @@ -46,6 +49,48 @@ public class FileServer implements Runnable public void run() { + try { + processRequest(); + } catch (Exception e) { } + } + + private void processRequest() throws Exception + { + DataOutputStream os = new DataOutputStream( + m_socket.getOutputStream()); + BufferedReader br = new BufferedReader( + new InputStreamReader( + m_socket.getInputStream())); + + /* read the file name the client is requesting */ + String fileName = br.readLine(); + String absFileName = m_rootPath + m_pathSeparator + fileName; + + FileInputStream fis = null; + try { + fis = new FileInputStream(absFileName); + } catch (Exception e) { } + + if (fis != null) + { + sendBytes(fis, os); + } + + os.close(); + br.close(); + m_socket.close(); + } + + private void sendBytes(FileInputStream fis, OutputStream os) + throws Exception + { + byte[] buff = new byte[1024]; + int bytes = 0; + + while ((bytes = fis.read(buff)) != -1) + { + os.write(buff, 0, bytes); + } } } } diff --git a/cs654/proj1/KaZaClient.java b/cs654/proj1/KaZaClient.java index e0b5e21..20d0f95 100644 --- a/cs654/proj1/KaZaClient.java +++ b/cs654/proj1/KaZaClient.java @@ -9,17 +9,22 @@ public class KaZaClient private String m_sharedFolder; private boolean m_connected = false; + private Socket m_socket; public KaZaClient(String userName, int kbps, String sharedFolder, String server) { m_sharedFolder = sharedFolder; - // TODO: connect - // IF (CONNECTED SUCCESSFULLY) - { - Thread fsThread = new Thread(new FileServer(LISTEN_PORT, m_sharedFolder)); - m_connected = true; + + try { + m_socket = new Socket(server, KaZaServer.LISTEN_PORT); + } catch (Exception e) { + return; } + + // TODO: publish our name and file list + Thread fsThread = new Thread(new FileServer(LISTEN_PORT, m_sharedFolder)); + m_connected = true; } public boolean connected() { return m_connected; }