BÁO CÁO THỰC HÀNH LẬP TRÌNH MẠNG DÙNG NGÔN NGỮ LẬP TRÌNH JAVA

52 105 0
  • Loading ...
    Loading ...
    Loading ...

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Tài liệu liên quan

Thông tin tài liệu

Ngày đăng: 28/09/2019, 11:41

BÁO CÁO THỰC HÀNH,LẬP TRÌNH MẠNG,NGÔN NGỮ LẬP TRÌNH JAVA ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN Tel (84-511) 736 949, Fax (84-511) 842 771 Website: itf.ud.edu.vn, E-mail: cntt@edu.ud.vn BÁO CÁO THỰC HÀNH LẬP TRÌNH MẠNG GVHD: SINH VIÊN : LỚP : MSSV: NHÓM: ThS.NGUYỄN VĂN NGUYÊN BÙI TẤN VIỆT 10T2 102152101166 11B ĐÀ NẴNG, 3/2014 Mục Lục Chương 1: CÁC BÀI TẬP THỰC HÀNH .1 1.1 BÀI THỰC HÀNH BUỔI 1.1.1 Bài tập 1.1.2 Bài tập 1.2 BÀI THỰC HÀNH BUỔI 1.2.1 Đề bài: 1.2.2 Phần chương trình Client: .6 1.2.3 Phần chương trình Server: 1.2.4 Phần chương trình xử lý Server: 1.2.5 Phần chương trình xử lý biểu thức: 1.3 BÀI THỰC HÀNH BUỔI 14 1.3.1 Đề 14 1.3.2 Tạo class tính tốn ma trận 14 1.3.3 Nhập ma trận: .14 1.3.4 Cộng, trừ ma trận 15 1.3.5 Nhân ma trận 16 1.3.6 Chia ma trận 17 1.3.7 Chương trình Client 22 1.3.8 Chương trình Server: 25 1.3.9 Demo 28 Chương 2: BÀI TẬP LÀM THÊM 30 2.1 ĐỀ BÀI 30 2.2 CHƯƠNG TRÌNH THÊM, SỬA, XĨA DANH SÁCH ĐẦU VÀO 30 2.2.1 Chuẩn bị 30 2.2.2 Tìm kiếm danh sách 30 2.2.3 Sửa liệu 31 2.2.4 Xóa liệu 33 2.2.5 Thêm liệu .34 2.2.6 Kiểm tra liệu 36 2.3 TRUYỀN NHẬN dỮ LIỆU GIỮA CLIENT – SERVER 37 2.3.1 Bên Client 37 Page | 2.3.2 Bên Server 40 2.4 XỬ LÝ CỦA CLIENT .42 2.5 XỬ LÝ CỦA SERVER 43 2.6 THUẬT TỐN PHÂN CƠNG GIÁO VIÊN COI THI .44 2.6.1 Lưu danh sách giáo viên phòng thi 44 2.6.2 Sắp xếp giám thị 44 2.7 DEMO 46 Page | LỜI NĨI ĐẦU Lập trình mạng nhiệm vụ quan trong việc phát triển ứng dụng doanh nghiệp Một chương trình mạng viết để chương trình máy tính khác truyền tin với cách hiệu an toàn cho dù chúng cài đặt mạng LAN, WAN hay mạng toàn cầu Internet, điều thành công nhiều hệ thơng Java ngơn ngữ lập trình hướng đối tượng thúy với nhiều đặc trưng ưu việt so với ngơn ngữ lập trình hướng đối tượng khác tính độc lập với nền, tính bảo mật,… Java ngôn ngữ từ đời hướng đến lập trình mạng nên việc viết chương trình lập trình mạng Java dễ dàng nhiều so với ngôn ngữ khác Page | CHƯƠNG 1: CÁC BÀI TẬP THỰC HÀNH 1.1 BÀI THỰC HÀNH BUỔI 1.1.1 Bài tập 1.1.1.1 Đề bài: Dùng Java xây dựng chương trình lấy liệu sinh viên từ Access xuất bảng 1.1.1.2 Thuật tốn: B1: Nạp trình điều khiển: Lớp DriverManager chịu trách nhiệm nạp driver tạo kết nối đến csdl: Class.forName(String) Với String "sun.jdbc.odbc.JdbcOdbcDriver" B2: Tạo thông tin kết nối đối tượng Connection: Với Access: Connection = DriverManager.getConnection("jdbc:odbc:testDB"); B3: Tạo đối tượng Statement để thực thi lệnh sql Statement stmt = (java.sql.Statement) con.createStatement(); String sql = "Select * from SinhVien"; ResultSet rs = ((java.sql.Statement) stmt).executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); B4: Lấy số cột bảng tên cột lưu vào mảng Object header[]; B5: Lấy số dòng bảng: B5.1: Biến rows = 0; B5.2: Di chuyển tới hàng bảng, lần di chuyển tăng rows lên Lặp hết dòng B6: Tạo mảng liệu chiều có số hàng số cột bảng Access: Object[][] data = new Object[rows][numberOfColumns]; B7: Di chuyển dòng bảng Access, đọc liệu trường gán liệu vào vị trí tương ứng mảng data Lặp hết dòng B8: Tạo đối tượng JTable để hiển thị liệu data, có nội dung header chứa header[], có trượt JScrollBar gắn vào đối tượng JFrame để hiển thị 1.1.1.3 Cài đặt import import import import import import import import import java.sql.Connection; java.sql.DriverManager; java.sql.ResultSet; java.sql.ResultSetMetaData; java.sql.SQLException; java.sql.Statement; javax.swing.JFrame; javax.swing.JScrollPane; javax.swing.JTable; Họ tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage Báo cáo thực hành lập trình mạng 2014 public class Database { public static void main(String arg[]) { Object header[]; Object data[][]; int rows, i, j; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection = DriverManager.getConnection("jdbc:odbc:testDB"); Statement stmt = (java.sql.Statement) con.createStatement(); String sql = "Select * from SinhVien"; ResultSet rs = ((java.sql.Statement) stmt).executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); header = new Object[numberOfColumns]; for (j = 1; j 0) { return false; } } if (row == 0) return false; return true; public boolean KiemTra_DuLieuVao_GiaoVien() { int row = 0, col; for (int i = 0; i < jtData.getRowCount(); i++) { col = KiemTra_BoDuLieu_GiaoVien(i); if (col == headerGV.length - 1) { row++; } else if (col > 0) { return false; } } if (row == 0) return false; return true; } Page 36 // Kiểm tra liệu thêm vào có đầy đủ ko? public int KiemTra_BoDuLieu_GiaoVien(int row) { int col = 0; String DATE_FORMAT = "dd/MM/yyyy"; for (int i = 1; i < headerGV.length; i++) { if (i == 3) { // Trường ngày sinh try { DateFormat df = new SimpleDateFormat(DATE_FORMAT); df.setLenient(false); df.parse(jtData.getValueAt(row, i).toString()); col++; } catch (Exception e) { } } else { try { if (!jtData.getValueAt(row, i).toString().equals("")) col++; } catch (Exception e) {} } } return col; } public int KiemTra_BoDuLieu_Phong(int row) { int col = 0; for (int i = 1; i < headerP.length; ++i) { try { if (!jtData.getValueAt(row, i).toString().equals("")) col++; } catch (Exception e) {} } return col; } 2.3 TRUYỀN NHẬN DỮ LIỆU GIỮA CLIENT – SERVER 2.3.1 Bên Client 2.3.1.1 Truyền liệu ban đầu qua Server Thuật toán: B1: Truyền tên file qua Server Chờ nhận phản hồi B2: Truyền kích thước file qua Server Chờ nhận phản hồi B4: Mở luồng đọc file B3: Đọc file vào mảng 1024 byte hết: B3.1: Gửi mảng cho Server Chờ phản hồi B4: Đóng luồng đọc file B4: Gửi số giám thị coi thi qua Server Chờ nhận phản hồi B5: Gửi số lần phân công qua Server Chờ nhận phản hồi Cài đặt: public void TransData() throws IOException { long sizeFile; fis = new FileInputStream(file); Họ tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 37 Báo cáo thực hành lập trình mạng 2014 // Gửi tên file qua server dos.writeUTF(file.getName()); dis.read(); Print_Debug("Tên file: " + file.getName()); // Gửi kích thước file sizeFile = file.length(); dos.writeLong(sizeFile); dis.read(); Print_Debug("Kích thước file: " + sizeFile); int x; x = fis.read(part); // Gửi liệu while (x > -1) { dos.write(part); dis.read(); x = fis.read(part); } fis.close(); // Gửi số giám thị coi thi dos.writeInt(soGiamThi_CoiThi); dis.read(); Print_Debug("Gửi số lần phân cơng"); GuiSoLan(); // Hồn thành việc gửi Print_Debug("Đã hoàn thành việc gửi"); Print_Debug(" "); } public void GuiSoLan() throws IOException { RandomAccessFile rf; try { rf = new RandomAccessFile("số lần phân công.txt", "r"); soLanPhanCong = rf.readInt(); } catch (FileNotFoundException e) { soLanPhanCong = 0; } catch (IOException e) { soLanPhanCong = 0; } } Print_Debug("Số lần phân công: " + soLanPhanCong); dos.writeInt(soLanPhanCong); dis.read(); 2.3.1.2 Nhận liệu từ Server Thuật toán: B1: Nhận tên file Gửi xác nhận B2: Tạo file với tên file nhận Mở luồng ghi Page 38 B3: Nhận kích thước file Gửi xác nhận B4: Lặp chưa nhận đủ số byte file: Đọc liệu vào mảng byte 1024 phần tử B4.1: Nếu số byte lại < 1024: B4.1.1: Chỉ nhận số lượng byte lại từ luồng vào B4.1.2: Ghi vào file số byte lại B4.2: Ngược lại: B4.2.1: Nhận đủ số byte mảng từ luồng vào B4.2.2: Ghi vào file số byte vừa nhận B4.3: Gửi xác nhận B5: Đóng luồng ghi file Cài đặt: public void ReceiveFile() throws IOException { long remainSize; String nameFile; int byteRead = 0; long sizeFile; // Nhận tên file nameFile = dis.readUTF(); dos.write(1); Print_Debug("Tên file kết quả: " + nameFile); // Tạo file fileResult = new File(file.getParent() + "\\" + nameFile); fos = new FileOutputStream(fileResult); Print_Debug("Đường dẫn: " + fileResult.getPath()); // Nhận kích thước file sizeFile = dis.readLong(); dos.write(1); Print_Debug("Kích thước file kết quả: " + sizeFile); // Nhận liệu remainSize = sizeFile; while (remainSize > 0) { if (remainSize < 1024) { byteRead = dis.read(part, 0, (int) remainSize); fos.write(part, 0, (int) remainSize); } else { byteRead = dis.read(part); fos.write(part); } remainSize -= byteRead; dos.write(1); } fos.close(); // Hoàn thành việc nhận Print_Debug("Đã hoàn thành việc nhận"); Print_Debug(" "); } Họ tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 39 Báo cáo thực hành lập trình mạng 2014 2.3.2 Bên Server 2.3.2.1 Nhận liệu từ Client Thuật toán: B1: Nhận tên file Gửi xác nhận B2: Tạo file với tên file nhận Mở luồng ghi B3: Nhận kích thước file Gửi xác nhận B4: Lặp chưa nhận đủ số byte file: Đọc liệu vào mảng byte 1024 phần tử B4.1: Nếu số byte lại < 1024: B4.1.1: Chỉ nhận số lượng byte lại từ luồng vào B4.1.2: Ghi vào file số byte lại B4.2: Ngược lại: B4.2.1: Nhận đủ số byte mảng từ luồng vào B4.2.2: Ghi vào file số byte vừa nhận B4.3: Gửi xác nhận B5: Đóng luồng ghi file B6: Nhận số giám thị coi thi Gửi xác nhận B7: Nhận số lần phân công Gửi xác nhận Cài đặt: public void ReceiveFile() throws IOException { long remainSize, sizeFile; String nameFile; int byteRead = 0; // Nhận tên file nameFile = dis.readUTF(); dos.write(1); Print_Debug("Tên file: " + nameFile); // Tạo trỏ file file = new File(nameFile); fos = new FileOutputStream(file); // Nhận kích thước file sizeFile = dis.readLong(); dos.write(1); Print_Debug("Kích thước: " + sizeFile); // Nhận liệu remainSize = sizeFile; while (remainSize > 0) { if (remainSize < 1024) { byteRead = dis.read(part, 0, (int) remainSize); fos.write(part, 0, (int) remainSize); } else { byteRead = dis.read(part); fos.write(part); } Page 40 remainSize -= byteRead; dos.write(1); } fos.close(); // Nhận số giám thị coi thi soGiamThi_CoiThi = dis.readInt(); dos.write(1); Print_Debug("Số cán coi thi: " + soGiamThi_CoiThi); // Đọc số lần phân công soLan_PhanCong = dis.readInt(); dos.write(1); Print_Debug("Số lần phân công: " + soLan_PhanCong); Print_Debug(" "); // Hoàn thành việc nhận Print_Debug("Đã hoàn thành việc nhận"); Print_Debug(" "); } 2.3.2.2 Truyền liệu cho Client Thuật toán: B1: Truyền tên file qua Server Chờ nhận phản hồi B2: Truyền kích thước file qua Server Chờ nhận phản hồi B4: Mở luồng đọc file B3: Đọc file vào mảng 1024 byte hết: B3.1: Gửi mảng cho Server Chờ phản hồi B4: Đóng luồng đọc file Cài đặt: public void TransFile() throws IOException { long sizeFile; fis = new FileInputStream(fileResult); // Gửi tên file dos.writeUTF(fileResult.getName()); dis.read(); Print_Debug("Tên file: " + fileResult.getName()); // Gửi kích thước file sizeFile = fileResult.length(); dos.writeLong(sizeFile); dis.read(); Print_Debug("Kích thước file: " + sizeFile); int x; x = fis.read(part); // Gửi liệu while (x > -1) { dos.write(part); dis.read(); x = fis.read(part); } Họ tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 41 Báo cáo thực hành lập trình mạng // Hoàn thành việc gửi Print_Debug("Đã hoàn thành việc gửi"); Print_Debug(" "); fis.close(); } 2.4 XỬ LÝ CỦA CLIENT Thuật toán: B1: Gửi liệu lên Server B2: Chờ hồi đáp kết từ Server B3: Nếu có kết quả: B3.1: Nhận liệu trả từ Server B3.2: Ghi số lần phân công vào file B4: Nếu không, thông báo lỗi Cài đặt: public void run() { boolean complete = false; int soLan; try { Print_Debug("Gửi file lên server"); TransData(); // Đọc kết trả Print_Debug("Chờ nhận kết quả"); complete = dis.readBoolean(); Print_Debug(" "); } Page 42 if (complete) { Print_Debug("Server xử lý thành công"); Print_Debug("Nhận kết trả "); ReceiveFile(); Luu_SoLanPhanCong(++soLanPhanCong); } else { Print_Debug("Server xử lý không thành công"); Print_Debug(" "); } Print_Debug("Đóng tất kết nối"); Print_Debug(" "); dis.close(); dos.close(); } catch (IOException e) {} 2014 2.5 XỬ LÝ CỦA SERVER Thuật toán: B1: Nhận file từ Client B2: Lấy liệu vào kiểm tra điều kiện đầu vào B3: Nếu điều kiện đầu vào thỏa: B3.1: Phân công danh sách B3.2: Tạo file kết để lưu B3.4 Ghi vào file B3.5: Thông báo cho Client xử lý xong B3.6: Truyền file cho Client B4: Nếu không: B4.1: Thông báo cho Client thất bại B5: Đóng luồng vào socket Cài đặt: public void run() { try { Print_Debug("Nhận file từ client"); ReceiveFile(); if (GetData() == true) { PhanCong(); fileResult = new File("Danh sách phân công.xls"); GhiVaoFile(); } Print_Debug("Đã xử lý xong"); Print_Debug(" "); dos.writeBoolean(true); Print_Debug("Gửi kết cho client"); TransFile(); } else { dos.writeBoolean(false); Print_Debug("Server xử lý không thành công"); Print_Debug(" "); } Print_Debug("Đóng tất kết nối"); Print_Debug(" "); socket.close(); dis.close(); dos.close(); } catch (IOException | WriteException e) { // TODO Auto-generated catch block e.printStackTrace(); } Họ tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 43 Báo cáo thực hành lập trình mạng 2014 2.6 THUẬT TỐN PHÂN CƠNG GIÁO VIÊN COI THI 2.6.1 Lưu danh sách giáo viên phòng thi Danh sách giáo viên lưu vào mảng giamThi = new String[][].Thứ tự cột mảng tương ứng với trường danh sách hàng tương ứng với trường danh sách Danh sách phòng thi lưu vào mảng chiều: phongThi = new String[] Thứ tự tương ứng với phòng thi danh sách 2.6.2 Sắp xếp giám thị Sử dụng mảng chiều Xep_GiamThi = new int[] lưu số xếp Các số ánh xạ đến hàng mảng giamThi để lấy thơng tin giám thị - Mảng Xep_GiamThi tính từ phần tử thứ → 2n – (n số phòng thi) giám thị chung phòng Phần tử thứ tự chẵn giám thị phần tử thứ tự lẻ giám thị Số lại từ 2n → m – giám thị hành lang (m số giám thị coi thi) Giả sử có 10 giám thị phòng thi Xét phòng thi, phòng thi có 10 lượt giám thị vào Và lần vào phòng lượt giám thị đồng thời khơng giám thị vào phòng lần nên ta có tối đa tổng cộng lần vào phòng Nếu số giám thị 11 có tối đa lần vào phòng, lần có 12 lượt vào phòng nên suy phải có giám thị vào phòng lần Chính ta quan tâm số giám thị chẵn Nếu số giám thị lẻ ta trừ – giám thị làm giám thị hành lang Từ ta rút ra, số cách xếp giám thị vào phòng tối đa có: Tổng số giám thị / cách Ta xếp giám thị sử dụng phương pháp quay vòng: - Giám thị phòng i + qua phòng i Giám thị phòng chuyển giám thị phòng cuối Giám thị phòng i + qua phòng i Giám thị phòng chuyển giám giám thị phòng kế cuối Giám thị phòng thứ chuyển giám thị phòng cuối Giả sử có phòng 10 giám thị Lần Phòng Phòng Phòng Phòng Phòng AB CD EF GH IJ CF EH GJ IB AD EJ GB ID AF CH GD IF AH CJ EB IH AJ CB ED GF AB CD EF GH IJ Với cách xếp xoay vòng ta đảm bảo khơng giám thị coi phòng lần không coi với lần Page 44 Cài đặt: public void PhanCong() { int n, n1, n2; n = soGiamThi; if (soGiamThi % == 1) { n; } if (n > 3) { for (int k = 0; k < soLan_PhanCong; k++) { // Đổi vị trị giám thị // Lưu giám thị n1 = Xep_GiamThi[0]; for (int i = 2; i < n; i += 2) { Xep_GiamThi[i - 2] = Xep_GiamThi[i]; } // Đưa giám thị vào vị trí thứ tính từ cuối Xep_GiamThi[n - 2] = n1; // Đổi vị trí giám thị n1 = Xep_GiamThi[1]; n2 = Xep_GiamThi[3]; for (int i = 5; i < n; i += 2) { Xep_GiamThi[i - 4] = Xep_GiamThi[i]; } } } // Đưa giám thị vào vị trí thứ tính từ cuối Xep_GiamThi[n - 3] = n1; // Đưa giám thị thứ vào vị trí cuối Xep_GiamThi[n - 1] = n2; } Họ tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 45 Báo cáo thực hành lập trình mạng 2.7 DEMO Page 46 2014 Họ tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 47 Báo cáo thực hành lập trình mạng Page 48 2014 ... X.maTran[j][k] += m * X.maTran[i][k]; } } for (i = 0; i < X.n; i++) dinhThuc *= X.maTran[i][i]; dinhThuc *= dau; Page 18 } return dinhThuc; b) Tính : Với ma trận vuông B cấp, loại bỏ hàng i cột j ta... trận khả nghịch B2.1: dinhThuc = Định thức ma trận B; B2.2: Nếu dinhThuc != 0: B2.2.1: Tạo ma trận C[B.n][B.n]; B2.2.1: Nếu B.n == 1: C[0][0] = (1 / C[0][0]) / dinhThuc; B2.2.2: Ngược lại: B2.2.2.1:... DataOutputStream(socket.getOutputStream()); while (true) { String snhan; try { snhan = inputStream.readUTF(); TinhBieuThuc t = new TinhBieuThuc(); kq = t.TinhToan(snhan); outputStream.writeDouble(kq); } catch (IOException ex)
- Xem thêm -

Xem thêm: BÁO CÁO THỰC HÀNH LẬP TRÌNH MẠNG DÙNG NGÔN NGỮ LẬP TRÌNH JAVA, BÁO CÁO THỰC HÀNH LẬP TRÌNH MẠNG DÙNG NGÔN NGỮ LẬP TRÌNH JAVA, Chương 1: CÁC BÀI TẬP THỰC HÀNH, 1 BÀI THỰC HÀNH BUỔI 1, 2 BÀI THỰC HÀNH BUỔI 2, 3 BÀI THỰC HÀNH BUỔI 3, Chương 2: BÀI TẬP LÀM THÊM, 2 CHƯƠNG TRÌNH THÊM, SỬA, XÓA DANH SÁCH ĐẦU VÀO, 3 TRUYỀN NHẬN dỮ LIỆU GIỮA CLIENT – SERVER, 6 THUẬT TOÁN PHÂN CÔNG GIÁO VIÊN COI THI

Từ khóa liên quan

Mục lục

Xem thêm