Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 64 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
64
Dung lượng
1,36 MB
Nội dung
Xâydựngứngdụngdựamạngnganghàng MỞ ĐẦU Tốc độ phát triển công nghệ mang đến cho người dùng cuối ứng dụng, tiện ích miễn phí chất lượng Nhưng dù cơng nghệ thay đổi, biến chuyển nào, nhu cầu chia sẻ liệu cần thiết tất người Con người sử dụngmạng Internet để tìm kiếm thơng tin, thơng tin có nhiều định dạng Trong thời gian gần đây, chia sẻ file nganghàng lên lĩnh vực ứngdụng chiếm tỉ lệ sử dụng băng thông lớn mạng Internet Bắt đầu từ tượng Napster vào cuối năm 90, phổ biến chương trình chia sẻ file nganghàng Gnutella, Freenet, Kazzaa tạo nên xu hướng phát triển mạnh mẽ việc chia sẻ nội dung cộng đồng người dùng Internet Hệ thống mạngnganghàngứngdụng chia sẻ file nganghàng trở thành đề tài thu hút nhiều quan tâm, nghiên cứu nhà khoa học Các hệ thống chia sẻ file nganghàng ngày phổ dụng nhờ lợi điểm rõ rệt so với hình thức chia sẻ file Web theo kiến trúc client server Tuy nhiên, ứngdụng chia sẻ file nganghàng phổ biến Internet hạn chế lớn Chúng cho phép người dùng tìm kiếm file theo tên hay gọi chung định danh chưa có chức truy xuất theo nội dung Mục đích khóa luận tốt nghiệp khai thác thành tựu công nghệ truy xuất thông tin để xâydựngứngdụng chia sẻ file nganghàng có chức tìm kiếm theo nội dung Hệ thống xâydựng theo mơ hình mạngnganghàng lai ghép, kết hợp phương thức trao đổi trực tiếp không thông qua trung gian với giải pháp sử dụng máy chủ tìm kiếm Chiến lược quản lý tập trung dựa máy chủ tìm kiếm giúp khắc phục khó khăn việc tìm kiếm thơng tin phân tán Máy chủ tìm kiếm khơng chứa nội dung file Nó cho biết ứng với từ khóa cho trước có file chúng Trang -1- Xâydựngứngdụngdựamạngnganghàng nằm đâu số điểm nút tham gia vào hệ thống Chương trình phát triển ngơn ngữ lập trình Java với tính tìm kiếm theo nội dung phát triển dựa thư viện mã nguồn mở Lucene LuậnvănxâydựngứngdụngdựamạngnganghàngLuậnvăn chia thành chương • Chương 1: Tổng quan mạng chia sẻ file nganghàng • Chương 2: Mô tả số phương pháp, kỹ thuật tạo mục cho tài liệu tìm kiếm dựa mục • Chương 3: Giải pháp xâydựngứngdụng • Chương 4: Cài đặt chương trình • Chương 5: Kết thực chương trình Mặc dù cố gắng với động viên giúp đỡ tận tình thầy giáo hướng dẫn xong trình độ hạn chế, nội dung đề tài phức tạp, phạm vi đề tài rộng nên khó tránh khỏi sai sót q trình làm đố án Em mong dẫn thầy góp ý bạn để chương trình em hồn thiện Cuối em xin chân thành cảm ơn động viên giúp đỡ nhiệt tình thầy hướng dẫn: TS Phạm Hồng Thái CN Lương Việt Nguyên giúp đỡ em hồn thành đề tài Hải Phòng, Tháng năm 2007 Sinh viên: Nguyễn Thị Hoa Trang -2- Xâydựngứngdụngdựamạngnganghàng Chương 1: TỔNG QUAN VỀ MẠNG CHIA SẺ FILE NGANGHÀNG 1.1 Giới thiệu mạngnganghàng (peer to peer – P2P) 1.1.1 Khái niệm Mạngnganghàngvấn đề hoàn toàn Các máy chủ dịch vụ thư điện tử (Mail servers) máy chủ phân giải tên miền (Domain Name Servers) kết nối với tạo mạngnganghàng Ví dụ máy chủ thư điện tử thực tương tác trực tiếp với Chúng gửi, nhận chuyển tiếp email cho Tuy dịch vụ thư điện tử hay DNS xuất từ lâu Internet khái niệm mạngnganghàng hay tính tốn nganghàng (P2P – Peer-to-Peer) đưa gần Mạngnganghàng hệ phân tán với đặc thù khơng tồn cấu điều khiển tập trung tổ chức có phân cấp [16] Trong hệ thống túy ngang hàng, chương trình chạy điểm nút có vai trò hồn tồn tương đương bình đẳng với Tính chất đối lập hoàn toàn với kiến trúc client – server truyền thống nơi có điểm nút đóng vai trò cung cấp dịch vụ (servers) điểm nút lại sử dụng dịch vụ (clients) Lợi điểm rõ rệt kiến trúc nganghàng khả tận dụng tốt tài nguyên (xử lý, băng thơng, lưu trữ) tồn mạng Bên cạnh đó, kiến trúc giúp cho dịch vụ mạng tránh khỏi tình trạng ngừng trệ server gặp phải trục trặc Tuy nhiên mơ hình tồn nhược điểm khó kiểm sốt trạng thái, hành vi điểm nút toàn mạng Ngoài đòi hỏi máy tham gia vào mạngnganghàng phải có lực xử lý băng thông gần tương đương Không giống kiến trúc client – server, hiệu suất hoạt động chung mạngnganghàng có xu hướng tăng lên gia tăng số điểm nút tham gia Hiệu suất phụ thuộc vào ứngdụngmạng cụ thể, vào giao thức nganghàng cấu hình mạng (topology) 1.1.2 Đặc điểm mạngnganghàng Các mạngnganghàng ngày thường mang số đặc trưng phổ biến Trang -3- Xâydựngứngdụngdựamạngnganghàng sau: Z Các điểm nút mạng nhận biết lẫn Nghĩa có chế giúp cho điểm nút tham gia vào mạng xác định máy khác thành viên mạng Từ chúng định vị nhau, gửi thông điệp tới nhận thông điệp từ Z Các điểm nút tạo mạng kết nối ảo mức trừu tượng cao so với cấu tổ chức như: tường lửa (firewall), NAT (Network Address Translation), mạng (subnet) Mỗi điểm nút nằm mạng khác nhau, chịu chế tổ chức, kiểm soát giới hạn hoàn toàn riêng biệt Tuy nhiên tham gia vào mạng, chúng tổ chức mối liên kết logic với thông qua việc sử dụng dịch vụ chạy ứngdụng tầng cao so với chế vừa nhắc tới Tạo mạng kết nối logic điểm nút bị biệt lập hóa mạng riêng biệt ý tưởng xuyên suốt kiến trúc nganghàng Z Mỗi điểm nút tự vừa đóng vai trò client vừa đóng vai trò server Điều thể rõ vai trò bình đẳng độc lập điểm nút Mọi điểm nút vừa cung cấp dịch vụ cho điểm nút khác vừa sử dụng dịch vụ hay nhiều điểm nút lại Z Xuất số nhóm điểm nút liên kết với để chia sẻ liệu cộng tác với xử lý Đây tổ hợp lại điểm nút có mối liên hệ chặt chẽ mang tính tương tác gần gũi trình hoạt động ứngdụngmạng 1.1.3 Tiện ích mạng P2P mang lại Giúp cho người dùng dễ dàng tìm liệu cần thiết Tận dụng tiện ích tổng hợp: Nơi lưu trữ, thông tin chi phí tính tốn phân phối PEER, làm máy tính tham gia vào mạng dễ dàng có thơng tin u cầu Tăng độ tin cậy Chứa đựng nhiều thơng tin: Trong mạng P2P có nhiều máy tính tham vào, thân máy tính chứa nhiều thơng tin, cơng cụ tìm kiếm nắm bắt khoảng 20% nội dung Website Trang -4- Xâydựngứngdụngdựamạngnganghàng 1.1.4 Những khó khăn thiết kế mạngnganghàng Z Cân đối băng thông: Trong phần lớn ứngdụng chạy mạngngang hàng, điểm nút đóng hai vai trò: client server nên tỉ lệ sử dụng băng thông đầu (outbound bandwidth) băng thông đầu vào (inbound bandwidth) điểm nút tương đối cân Tuy nhiên nhà cung cấp dịch vụ mạng (ISPs) lại thường triển khai mạng khơng đối xứng dành ưu tiên cho phần băng thơng đầu vào Ví dụ số ISP mạng DSL hỗ trợ 1.5Mbps băng thơng đầu vào có 128Kbps cho băng thơng đầu Cho dù băng thông tổng cộng kết nối vật lý có mở rộng hạ tầng kỹ thuật ISP chủ yếu hỗ trợ chế bất đối xứng Giải pháp triệt vấn đề đến từ cộng tác ISP khách hàng việc triển khai thiết bị mạng chuyên dụng Z Tổ chức không gian tên: Việc đặt tên cho website thực thông qua hệ thống phân cấp dịch vụ phân giải tên miền (DNS) Tuy nhiên mạngnganghàng không tồn chế tương tự Không máy chủ dịch vụ web, điểm nút mạngnganghàng không tồn trạng thái tĩnh Thời điểm khoảng thời gian tham gia vào mạng điểm nút ko thể xác định Công việc tạo tên (định danh) cho đối tượng, thành phần mạng phải thực người phát triển ứngdụng phụ thuộc vào đặc thù ứngdụng Z Chứng thực kiểm tra quyền truy cập người dùng: Nếu tất file đặt server dễ dàng việc chứng thực người dùng kiểm tra quyền hạn truy cập họ liệu Tuy nhiên tính chất phân tán mạngngang hàng, công việc phải thực điểm nút Người phát triển muốn xâydựngứngdụngnganghàng hoàn chỉnh cần quan tâm nhiều đến vấn đề bảo mật, chống hành động xâm nhập trái phép làm ảnh hưởng tới liệu Z Kiểm soát hành vi người dùng: Do lưu trữ tập trung thông tin hành động điểm nút nên khó kiểm sốt hành động Lấy ví dụ mạng chia sẻ file ngang hàng, người dùng thực hành vi không thực phù hợp sau: e Không chia sẻ file máy Trang -5- Xâydựngứngdụngdựamạngnganghàng e Chia sẻ file bị lỗi e Chia sẻ file chứa mã nguy hiểm, virus e Chia sẻ file mà nội dung chắn khơng quan tâm e Không cho phép điểm nút khác tải file chia sẻ máy Nếu tất điểm nút tham gia thực hành vi tiêu cực hoạt động mạngnganghàng thực không hiệu an toàn Tùy thuộc vào ứngdụng cụ thể, người thiết kế phát triển phải thiết lập chế kiểm soát hành vi điểm nút để bảo đảm chúng thực có đóng góp tích cực cho cộng đồng sử dụngmạng 1.1.5 Phân loại ứngdụngmạngnganghàng Các ứngdụngmạngnganghàng phân chia thành số nhóm sau: Z Chia sẻ file: Gnutella, FastTrack, Napster Z Chia sẻ tài nguyên phân tán: SETI@Home, Avaki, Entropia dự án tính tốn lưới Z Phân phối nội dung: OpenCola, Blue Falcon Networks, Konitiki Z Truyền thông P2P: AOL Instant Messenger, Yahoo! Messenger, ICQ, Jabber Z Các ứngdụng cộng tác: Hive, Groove, myJXTA 1.2 Mơ hình mạng P2P 1.2.1 Mơ hình tập trung Mô tả: Mạng tập trung bao gồm Server trung tâm xung quanh Server máy Clients Có mơ hình mạng tập trung: Single Centralized: Trong mơ hình máy Client kết nối trực tiếp với Server Trong mơ hình tất Client bình đẳng nhau, Client giao tiếp với thông qua Server trung tâm Trang -6- Xâydựngứngdụngdựamạngnganghàng Hình 1: Mơ hình mạng tập trung Cơ chế hoạt động mơ hình mạng Single Centralized: Mỗi Client mạng u cầu file yêu cầu gửi đến Server, Server nhận yêu cầu xử lý yêu cầu, database Server có thơng tin file đó, thơng báo cho Client, sau bên có bên xin để bắt đầu q trình download Ưu điểm mơ hình Single Centralized: Khả xử lý thơng tin nhanh chóng, đáng tin cậy, thời gian tìm kiếm thơng tin nhanh chóng xác Nhược điểm: Có thể có nhiều yêu cầu Client đồng loạt gửi đến Server gây nên tình trạng tải Server, khiến cho tốc độ hoạt động trung bình hệ thống bị giảm sút Hơn Server trung tâm bị hỏng tồn hệ thống ngừng hoạt động Multiple Mini Centralized: Bao gồm nhiều Server kết nối với nhau, Server kết nối với nhiều Client Một Client kết nối với Server, Server kết nối với nhiều Client Các Server trao đổi thơng điệp với Trang -7- Xâydựngứngdụngdựamạngnganghàng Hình 2: Mơ hình mạng Multiple Mini – Centralized Cơ chế hoạt động mơ hình mạng Multiple Mini – Centralized: Khi Client yêu cầu file, gửi yêu cầu đến Server mà kết nối trực tiếp Nếu database mà có có thơng điệp gửi lại cho Client u cầu Client có file liệu để thiết lập download Trong trường hợp khơng có file đó, gửi thơng điệp đến Server hàng xóm để tiếp tục tìm kiếm Ưu điểm mơ hình mạng Multiple Mini – Centralized: Có nhiều Server khả xử lý thông tin lớn, yêu cầu Client phân tán gửi đến Server khác làm giảm tải Server Hơn việc có nhiều Server mạng làm tăng hệ số an toàn cho hệ thống Server bị hỏng đảm bảo mạng hoạt động ổn định với Client khơng kết nối với Server 1.2.2 Mơ hình phân tán Mơ tả: Trong mạng P2P phân tán hồn tồn khơng có vai trò Server, thân Client lại đóng vai trò Server Hai mơ hình mạng phân tán: Trang -8- Xâydựngứngdụngdựamạngnganghàng Phân tán hoàn toàn (Completely decentralized index): Mạng tạo Client, Client gửi u cầu thơng tin u cầu broadcast tới tồn Client mạng Ưu điểm mạng phân tán hoàn tồn: Đây thực mơ hình gốc mạng P2P, yêu cầu gửi đến nhiều PEER tham gia khả tìm thấy thơng tin u cầu lớn Nhược điểm: Do không xử lý tập trung nên thời gian chờ đợi PEER gửi yêu cầu lớn khả mát thơng tin lớn Hình 3: Mơ hình mạng phân tán Phân tán khơng hồn tồn (Multiple semi decentralized index): Các Client đóng vai trò Server cần thiết - trở thành super PEER, Client khác gửi request đến super PEER để tìm thơng tin Ưu điểm: Tận dụng nguồn tài nguyên phần cứng lớn, tăng khả tồn hệ thống lên Khả PEER trở thành super PEER không giới hạn Nhược điểm: Việc phân chia “chức năng” PEER phức tạp Trang -9- Xâydựngứngdụngdựamạngnganghàng Hình 4: Mơ hình mạng phân tán khơng hồn tồn 1.3 Ưu, nhược điểm P2P 1.3.1 Ưu điểm Máy tính lắp đặt bàn làm việc người dùng Người dùng tự quản lý công việc đề kế hoạch bảo mật riêng Tất người dùng chia sẻ tài nguyên theo cách thức tùy ý Những tài nguyên gồm có liệu thư mục dùng chung, máy in, card Fax, modem,… Mất mát liệu sơ ý không ảnh hưởng lớn đến hệ thống Cáp đơn giản, dễ thấy, dễ sử dụng để nối từ máy tính đến máy tính khác mạng Trong mơi trường P2P máy tính phải sử dụng tài nguyên để hỗ trợ cho người dùng cục bộ, sử dụng tài nguyên bổ sung để hỗ trợ cho người dùng truy cập mạng từ xa Trang -10- Xâydựngứngdụngdựamạngnganghàng } public synchronized void removePeer(String id) throws IOException { if(!indexed) return; IndexReader reader = IndexReader.open(INDEX_DIR); reader.deleteDocuments(new Term("sessionId", id.trim())); reader.close(); } public static void main(String[] args) { new Server().listen(); } } Lớp server.ServerThread class ServerThread extends Thread { private Server server; private Socket s; private String sessionId; private File tempDir; private DataInputStream fromPeer; private DataOutputStream toPeer; public ServerThread(Server server, Socket s, int id, ThreadGroup tg) throws IOException { super(tg, String.valueOf(id)); this.server = server; this.s = s; sessionId = String.valueOf(id); fromPeer = new DataInputStream(s.getInputStream()); toPeer = new DataOutputStream(s.getOutputStream()); // create a temporary index for the connected peer tempDir = new File("server\\temp\\" + sessionId); tempDir.mkdirs(); System.out.println("Peer " + sessionId + " connected"); } public void run() { try { toPeer.writeInt(Protocol.INIT); toPeer.writeUTF(sessionId); // Login sucessfully // return sessionId to peer toPeer.writeUTF(s.getInetAddress().getHostAddress()); Trang -50- Xâydựngứngdụngdựamạngnganghàng boolean stop = false; while(!stop) { int request = fromPeer.readInt(); // One fragment of index is sent to server if(request == Protocol.SHARE || request == Protocol.SHARE_FINISH) shareDocument(request); if(request == Protocol.UNSHARE) unshareDocument(request); if(request == Protocol.DELETE) unshareDocument(request); if(request == Protocol.UPDATE || request == Protocol.UPDATE_FINISH) shareDocument(request); if(request == Protocol.SEARCH) search(); if(request == Protocol.LOG_OUT) { server.removePeer(sessionId); stop = true; } } } catch(IOException ioe) { ioe.printStackTrace(); } finally { finish(); } } private void search() throws IOException { String queryString = fromPeer.readUTF(); if(!server.indexed) { toPeer.writeInt(Protocol.RESULT); toPeer.writeInt(0); return; Trang -51- Xâydựngứngdụngdựamạngnganghàng } Directory dir = FSDirectory.getDirectory(Server.INDEX_DIR, false); IndexSearcher searcher = new IndexSearcher(dir); // default searching field is "content" QueryParser parser StandardAnalyzer()); = new QueryParser("content", queryString = "(" + queryString + ")" + " AND " + "-sessionId:" + sessionId; Query query; try { // parsing the user string to standard query query = parser.parse(queryString); } catch(ParseException pe) { toPeer.writeInt(Protocol.INVALID_QUERY); return; } Hits resultSet = searcher.search(query); int numResult = resultSet.length(); toPeer.writeInt(Protocol.RESULT); toPeer.writeInt(numResult); for(int i = 0; i < numResult; i ++) { Document doc = resultSet.doc(i); toPeer.writeUTF(doc.get("ip")); toPeer.writeUTF(doc.get("fullName")); toPeer.writeUTF(doc.get("path")); toPeer.writeUTF(doc.get("size")); toPeer.writeUTF(doc.get("modified")); } toPeer.flush(); dir.close(); searcher.close(); } private void shareDocument(int request) throws IOException { // name of component file String fileName = fromPeer.readUTF(); File file = new File(tempDir, fileName); DataOutputStream toFile = new DataOutputStream(new FileOutputStream(file)); byte[] byteArr = new byte[1024]; long size = fromPeer.readLong(); Trang -52- new Xâydựngứngdụngdựamạngnganghàng long remain = size; int interval; interval = (remain > 1024) ? 1024 : (int)remain; int amount; // write the received file to temporary directory while((amount = fromPeer.read(byteArr, 0, interval)) != -1) { toFile.write(byteArr, 0, amount); toFile.flush(); remain -= amount; if(remain 1024) ? 1024 : (int)remain; } toFile.close(); // if all files are received if (request == Protocol.SHARE_FINISH || request == Protocol.UPDATE_FINISH) { try { server.addDocument(tempDir); // update the Index } catch(IOException ioe) { ioe.printStackTrace(); if(request == Protocol.SHARE_FINISH) toPeer.writeInt(Protocol.SHARE_FAIL); else toPeer.writeInt(Protocol.UPDATE_FAIL); toPeer.flush(); return; } // delete all files in temporary directory File[] fileList = tempDir.listFiles(); for(int i = 0; i < fileList.length; i ++) fileList[i].delete(); if(request == Protocol.SHARE_FINISH) toPeer.writeInt(Protocol.SHARE_OK); else toPeer.writeInt(Protocol.UPDATE_OK); toPeer.flush(); } } Trang -53- Xâydựngứngdụngdựamạngnganghàng private void unshareDocument(int request) throws IOException { String documentId = fromPeer.readUTF(); try { server.removeDocument(documentId); } catch(IOException ioe) { ioe.printStackTrace(); if(request == Protocol.UNSHARE) toPeer.writeInt(Protocol.UNSHARE_FAIL); else toPeer.writeInt(Protocol.UPDATE_FAIL); return; } if(request == Protocol.UNSHARE) toPeer.writeInt(Protocol.UNSHARE_OK); } private void finish() { try { File[] fileList = tempDir.listFiles(); for(int i = 0; i < fileList.length; i ++) fileList[i].delete(); tempDir.delete(); fromPeer.close(); toPeer.close(); s.close(); System.out.println("Peer " + sessionId + " disconnected"); } catch(IOException ioe) { ioe.printStackTrace(); } finally { if(this.currentThread().activeCount() == 1) server.stopServer(); // Notify here (used test only) } } } Lớp peer.ClientPeer public class ClientPeer { private int shareDocCount = 0; private Socket sock; private DataInputStream fromServer; private DataOutputStream toServer; private String sessionId; Trang -54- Xâydựngứngdụngdựamạngnganghàng private boolean stop = false; private Indexer indexer; private Vector sharingDoc = new Vector(); private Vector unsharingDoc = new Vector(); private Vector updatingDoc = new Vector(); private FileServer fileServer; private SearchWindow searchWindow; private MainWindow mainWindow; SharedList sharedList = new SharedList(); ResultList resultList = new ResultList(); public ClientPeer() { try { sock = new Socket("localhost", 3000); fromServer = new DataInputStream(sock.getInputStream()); toServer = new DataOutputStream(sock.getOutputStream()); } catch(IOException ioe) { System.out.println("Cannot connect to indexing server"); ioe.printStackTrace(); return; } try { if(fromServer.readInt() == Protocol.INIT) sessionId = fromServer.readUTF(); System.out.println("Session Id: " + sessionId); String ip = fromServer.readUTF(); System.out.println("IP: " + ip); indexer = new Indexer(sessionId, ip); } catch(IOException ioe) { ioe.printStackTrace(); } mainWindow = new MainWindow(this, "Peer " + sessionId); searchWindow = new SearchWindow(this, "Search " + sessionId); mainWindow.setVisible(true); searchWindow.setVisible(false); System.out.println("Connected to server"); try { fileServer = new FileServer(this); fileServer.start(); } catch(IOException ioe) { Trang -55- Xâydựngứngdụngdựamạngnganghàng ioe.printStackTrace(); return; } } public void run() { try { while(!stop) { SharedDocument doc; int response = fromServer.readInt(); if(response == Protocol.SHARE_OK) { sharedList.addDocument((SharedDocument) sharingDoc.remove(0)); mainWindow.repaint(); } if(response == Protocol.SHARE_FAIL) { doc = (SharedDocument)sharingDoc.remove(0); JOptionPane.showMessageDialog(mainWindow, doc.file.getName() + "cannot be shared", "Error", JOptionPane.ERROR_MESSAGE); } if(response == Protocol.UNSHARE_OK) { sharedList.removeDocument((SharedDocument) unsharingDoc.remove(0)); mainWindow.repaint(); } if(response == Protocol.UNSHARE_FAIL) { doc = (SharedDocument)unsharingDoc.remove(0); JOptionPane.showMessageDialog(mainWindow, doc.file.getName() + "cannot be unshared", "Error", JOptionPane.ERROR_MESSAGE); } if(response == Protocol.UPDATE_OK) { doc = (SharedDocument)updatingDoc.remove(0); SharedDocument newDoc = new SharedDocument( doc.file, doc.documentId); sharedList.updateDocument(doc, newDoc); mainWindow.repaint(); Trang -56- Xâydựngứngdụngdựamạngnganghàng } if(response == Protocol.UPDATE_FAIL) { doc = (SharedDocument)updatingDoc.remove(0); JOptionPane.showMessageDialog(mainWindow, doc.file.getName() + "cannot be updated", "Error", JOptionPane.ERROR_MESSAGE); } if(response == Protocol.RESULT) fillResultList(); if(response == Protocol.INVALID_QUERY) JOptionPane.showMessageDialog(searchWindow, "Your query is invalid", "Error", JOptionPane.ERROR_MESSAGE); } } catch (Exception ioe) { // ioe.printStackTrace(); finish(); } finally { System.exit(0); } } private void fillResultList() throws IOException { int numResults = fromServer.readInt(); resultList.clear(); if(numResults