import java.io.*; import java.net.*; import java.util.*; public class KaZaClient { public static final int LISTEN_PORT = 3443; private String m_sharedFolder; private boolean m_connected = false; private Socket m_socket; private DataOutputStream m_os; public KaZaClient(String userName, int kbps, String sharedFolder, String server) { m_sharedFolder = sharedFolder; try { m_socket = new Socket(server, KaZaServer.LISTEN_PORT); m_os = new DataOutputStream(m_socket.getOutputStream()); m_os.writeBytes("HELO " + userName + "\n"); m_os.writeBytes("SPED " + kbps + "\n"); File sharedDir = new File(m_sharedFolder); if (sharedDir.isDirectory()) { String[] files = sharedDir.list(); for (String fName : files) { if (fName.endsWith(".kaza")) { /* we found a description file, publish this file */ FileInputStream fis = new FileInputStream(m_sharedFolder + File.separator + fName); BufferedReader br = new BufferedReader( new InputStreamReader(fis)); String sharedFileName = br.readLine(); String sharedFileDesc = br.readLine(); m_os.writeBytes("DESC " + sharedFileName + "\n" + sharedFileDesc + "\n"); } } } } catch (Exception e) { return; } Thread fsThread = new Thread(new FileServer(LISTEN_PORT, m_sharedFolder)); m_connected = true; } public boolean connected() { return m_connected; } public void close() { if (m_connected) { try { m_os.writeBytes("QUIT\n"); m_os.close(); m_socket.close(); } catch (Exception e) { } m_connected = false; } } public Vector performSearch(String query) { Vector results = new Vector(); try { m_os.writeBytes("SRCH 2 " + query + "\n"); BufferedReader br = new BufferedReader( new InputStreamReader( m_socket.getInputStream())); for (;;) { String resultStr = br.readLine(); if (resultStr.equals(".")) break; StringTokenizer tokens = new StringTokenizer(resultStr, "|"); SearchResult result = new SearchResult(); for (int i = 0; i < 4; i++) { if (tokens.hasMoreTokens()) { String t = tokens.nextToken(); switch (i) { case 0: result.peerAddress = t; break; case 1: result.userName = t; break; case 2: result.fileName = t; break; case 3: result.fileDescription = t; break; } } } results.add(result); } } catch (Exception e) { } return results; } public class SearchResult { String peerAddress = ""; String userName = ""; String fileName = ""; String fileDescription = ""; } }