1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đề cương ôn tập lập trình mạng (Phần bài tập)

25 1.4K 4

Đang tải... (xem toàn văn)

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

THÔNG TIN TÀI LIỆU

Đề cương ôn tập lập trình mạng (Phần bài tập) A. PHẦN LẬP TRÌNH VỚI SOCKET Bài 1 Viết chương trình ứng dụng mạng theo mô hình clientserver sử dụng TCP Socket.Server cho phép nhiều máy khách truy cập (client) đồng thời. Chương trình máy khách cho phép nhập vào bản ghi sinh viên gồm họ tên, mã sinh viên từ bàn phím, gửi bản ghi đến máy server và ghi vào tệp dữ liệu Data.dat trên máy từ xa. Máy từ xa nếu ghi bản ghi vào tệp thành công gửi về chuỗi “Da cap nhat”, nếu không trả về chuỗi “ Loi cap nhat ban ghi.” Và kết thúc chương trình. Yêu cầu xây dựng trong 2 trường hợp: a)Luồng nhập xuất kiểu ký tự; b)Luồng nhậpxuất kiểu byte. Bài 2 Viết chương trình ứng dụng mạng theo mô hình clientserver sử dụng TCP Socket. Client gửi 2 số đến Server, Server gửi trả lại kết quả là tổng của 2 số. Client hiển thị tổng. Server có chức năng phục vụ nhiều client một thời điểm. Chương trình phía Client: package tinhtong; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String args) throws IOException

Đề cương ôn tập lập trình mạng (Phần tập) A PHẦN LẬP TRÌNH VỚI SOCKET Bài Viết chương trình ứng dụng mạng theo mô hình client/server sử dụng TCP Socket.Server cho phép nhiều máy khách truy cập (client) đồng thời Chương trình máy khách cho phép nhập vào ghi sinh viên gồm họ tên, mã sinh viên từ bàn phím, gửi ghi đến máy server ghi vào tệp liệu Data.dat máy từ xa Máy từ xa ghi ghi vào tệp thành công gửi chuỗi “Da cap nhat”, không trả chuỗi “ Loi cap nhat ban ghi.” Và kết thúc chương trình Yêu cầu xây dựng trường hợp: a)Luồng nhập/ xuất kiểu ký tự; b)Luồng nhập/xuất kiểu byte Bài Viết chương trình ứng dụng mạng theo mô hình client/server sử dụng TCP Socket Client gửi số đến Server, Server gửi trả lại kết tổng số Client hiển thị tổng Server có chức phục vụ nhiều client thời điểm // Chương trình phía Client: package tinhtong; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String []args) throws IOException { // khoi tao bien kieu String String a,b,tong; //tao socket de ket noi toi server Socket ClientSocket = new Socket("Localhost", 1234); //thong bao da ket noi cong System.out.println("Connected to server"); //tao luong nhap du lieu tu ban phim DataInputStream inFromUser = new DataInputStream(System.in); //tao luong nhan du lieu tu server DataInputStream inFromServer = new DataInputStream(ClientSocket.getInputStream()); //tao luong gui du lieu len server DataOutputStream outToServer = new DataOutputStream(ClientSocket.getOutputStream()); // nhap lieu tu ban phim try{ System.out.println("nhap vao so a :"); a=inFromUser.readLine(); System.out.println("nhap vao so b :"); b=inFromUser.readLine(); // gui len server outToServer.writeBytes(a+'\n'); outToServer.writeBytes(b+'\n'); }catch(UnknownHostException e) { System.err.println("Server Not Found"); System.exit(1); }catch(IOException e) { System.err.println("Cannot make a connection"); System.exit(1); } //nhan ve tu server tong=inFromServer.readLine(); //in man hinh System.out.println("Tong chu so a va b la :"+tong); //dong luong gui du lieu len server outToServer.close(); //dong luong nhan du lieu tu server inFromServer.close(); //dong socket client ClientSocket.close(); } } //Chương trình phía Server /* * chuong trinh tinh tong so kieu integer tu Client gui len server */ package tinhtong; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /** * * @author Ruby */ public class Server { public static void main(String []args) throws IOException { String so1,so2,so3; int tong; // tao server socket ServerSocket server = new ServerSocket(1234); System.out.println("Server is now already"); //tao socket ket noi tu client toi server Socket connectionSocket = server.accept(); //tao luong nhan du lieu tu client DataInputStream inFromClient = new DataInputStream(connectionSocket.getInputStream()); // tao luong gui du lieu toi client DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); // truyen du lieu tu client vao bien so1 va so2 so1 = inFromClient.readLine(); so2 = inFromClient.readLine(); //ep so1 va so2 tu kieu String sang kieu Integer int a = Integer.parseInt(so1); int b = Integer.parseInt(so2); //tinh tong a + b tong = a + b; //ep tong so a+b sang kieu String so3 = String.valueOf(tong); //gui so3 ve client outToClient.writeBytes(so3+'\n'); //dong luong nhan du lieu tu client inFromClient.close(); //dong luong gui du lieu ve client outToClient.close(); //dong server socket server.close(); } } Bài Sửa lại chương trình tập với chương trình client sử dụng giao diện đồ họa hình vẽ Hình Bài Viết chương trình ứng dụng mạng theo mô hình client/server sử dụng TCP Socket Chương trình máy khách cho phép nhập vào ghi nhân viên gồm tên đăng nhập, mật từ bàn phím, gửi ghi đến máy từ xa (server), server so sánh với tài khoản có sẵn sở liệu SQL Server, tài khoản tồn máy từ xa trả chuỗi “Dang nhap cong”, ngược lại trả chuỗi “ Tai khoan khong ton tai” Bài Viết chương trình ứng dụng mạng theo mô hình client/server sử dụng UDP Socket Chương trình máy client có giao diện đồ họa (hình 1) cho phép nhập ghi sinh viên gồm họ tên, mã số sinh viên gửi tới máy từ xa Máy từ xa mở tệp Data.dat kiểm tra có ghi tìm kiếm trả ghi cho máy khách hiển thị, máy từ xa trả chuỗi “Ban ghi không ton tai.” Và kết thúc chương trình Bài Viết chương trình ứng dụng mạng theo mô hình client/server sử dụng UDP Socket Chương trình máy khách cho phép nhập vào ghi nhân viên gồm tên đăng nhập, mật từ bàn phím, gửi ghi đến máy từ xa (server), server so sánh với tài khoản có sẵn sở liệu SQL Server, tài khoản tồn máy từ xa trả chuỗi “Dang nhap cong”, ngược lại trả chuỗi “ Tai khoan khong ton tai” Bài Viết chương trình ứng dụng mạng theo mô hình client/server sử dụng TCP Socket Chương trình máy khách (client) cho phép nhập vào ghi sinh viên gồm họ tên, mã sinh viên từ bàn phím, gửi ghi đến máy từ xa (server) ghi vào sở liệu SQL Server máy từ xa Máy từ xa ghi ghi vào CSDL SQL Server thành công gửi chuỗi “Cap nhat cong”, không trả chuỗi “ Cap nhat khong cong.” Và kết thúc chương trình Yêu cầu: luồng nhập xuất kiểu ký tự Bài Viết chương trình ứng dụng mạng theo mô hình client/server sử dụng UDP Socket Chương trình máy khách (client) cho phép nhập vào ghi sinh viên gồm họ tên, mã sinh viên từ bàn phím, gửi ghi đến máy từ xa (server) ghi vào sở liệu SQL Server máy từ xa Máy từ xa ghi ghi vào CSDL SQL Server thành công gửi chuỗi “Cap nhat cong”, không trả chuỗi “ Cap nhat khong cong.” Và kết thúc chương trình Yêu cầu: luồng nhập xuất kiểu ký tự Bài Viết chương trình ứng dụng mạng theo mô hình client/server sử dụng TCP Socket Client gửi chuỗi kí tự đến Server, Server gửi trả lại chuỗi kí tự in hoa Client hiển thị chuỗi in hoa.Client chạy liên tuc gửi chuỗi kí tự “quit” đến Server Client dừng Server có chức phục vụ nhiều client thời điểm Bài 10 Viết chương trình ứng dụng mạng theo mô hình client/server sử dụng TCP socket Chương trình client cho phép nhập dã số nguyên từ bàn phím gửi tới server, server nhận dãy số hiển thị tên, địa IP, số hiệu cổng client dãy số nhận Sau thực tính tổng dãy số, xếp đãy số theo chiểu tang dần, hiển thị kết trả kết cho client Chương trình lặp lại gặp chuỗi “Quit” kết thúc B PHẦN RMI Bài 11 Viết chương trình đăng nhập tới máy từ xa sử dụng kỹ thuật RMI Chương trình máy khách cho phép nhập tài khoản (username, pasword) hình vẽ 2, gọi phương thức từ xa để đăng nhập, so sánh với tài khoản có sẵn, tài khoản tồn máy từ xa trả chuỗi “Dang nhap cong”, ngược lại trả chuỗi “ Tai khoan khong ton tai” Hình 2.1 Sơ đồ lớp phía client Sơ đồ lớp phía client thiết kế theo mô hình MVC Hình 5.6, bao gồm lớp tương ứng với sơ đồ M-V-C sau: • Lớp User: lớp tương ứng với thành phần model (M), bao gồm hai thuộc tính username password, hàm khởi tạo cặp getter/setter tương ứng với thuộc tính • Lớp RMILoginClientView: lớp tương ứng với thành phần view (V), lớp form nên phải kế thừa từ lớp JFrame Java, chứa thuộc tính thành phần đồ họa bao gồm ô text nhập username, ô text nhập password, nút Login • Lớp RMILoginClientControl: lớp tương ứng với thành phần control (C), chứa lớp nội LoginListener Khi nút Login tầng view bị click chuyển tiếp kiện xuống lớp nội để xử lí Tất xử lí gọi từ phương thức actionPerformed lớp nội này, bao gồm: lấy thông tin form giao diện, triệu gọi thử tục từ xa RMI kiểm tra đăng nhập yêu cầu form giao diện hiển thị - 2.2 Sơ đồ lớp phía server Sơ đồ lớp phía server thiết kế theo mô hình MVC Hình 5.7, bao gồm lớp tương ứng với sơ đồ M-V-C sau: • Lớp User: lớp thực thể, dùng chung thống với lớp phía bên client Lớp RMILoginServerView: lớp tương ứng với thành phần view (V), lớp dùng • hiển thị thông báo trạng thái hoạt động bên server RMI • Giao diện RMILoginInterface: giao diện (interface) khai báo đối tượng từ xa, khai báo thủ tục checkLogin(): thủ tục nhận vào tham số kiểu User, trả kết dạng String • Lớp RMILoginServerControl: lớp tương ứng với thành phần control (C), đảm nhiệm vai trò xử lí server RMI, định nghĩa cụ thể lại phương thức khai báo RMILoginInterface, sau đăng kí thân vào server RMI để phục vụ lời triệu gọi từ phía client • Tuần tự bước thực Tuần tự bước xử lí sau (Hình vẽ) Ở phía client, người dùng nhập username/password click vào giao diện lớp RMILoginClientView Lớp RMILoginClientView đóng gói thông tin username/password form vào đối tượng model User phương thức getUser() chuyển xuống cho lớp RMILoginClientControl xử lí Lớp RMILoginClientControl triệu gọi làm checkLogin() từ phía server RMI Server trả cho bên client skeleton phương thức checkLogin() Bên phía client, nhận skeleton, gọi phương thức checkLogin() để kểm tra thông tin đăng nhập Kết kiểm tra lớp RMILoginClientControl chuyển cho lớp RMILoginClientView hiển thị phương thức showMessage() Lớp RMILoginClientView hiển thị kết đăng nhập lên cho người dùng Cài đặt CT: - Package RMI.Client //User.java package rmi.client; import java.io.Serializable; public class User implements Serializable{ private String userName; private String password; public User(){ } public User(String username, String password){ this.userName = username; this.password = password; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } } // RMILoginClientView.java package rmi.client; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; /** * * @author Ruby */ public class RMILoginClientView extends JFrame implements ActionListener{ private JTextField txtUsername; private JPasswordField txtPassword; private JButton btnLogin; public RMILoginClientView(){ super("RMI Login MVC"); txtUsername = new JTextField(15); txtPassword = new JPasswordField(15); txtPassword.setEchoChar('*'); btnLogin = new JButton("Login"); JPanel content = new JPanel(); content.setLayout(new FlowLayout()); content.add(new JLabel("Username:")); content.add(txtUsername); content.add(new JLabel("Password:")); content.add(txtPassword); content.add(btnLogin); this.setContentPane(content); this.pack(); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } public void actionPerformed(ActionEvent e) { } public User getUser(){ User model = new User(txtUsername.getText(), txtPassword.getText()); return model; } public void showMessage(String msg){ JOptionPane.showMessageDialog(this, msg); } public void addLoginListener(ActionListener log) { btnLogin.addActionListener(log); } } //RMILoginClientControl.java package rmi.client; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import rmi.server.RMILoginInterface; /** * * @author Ruby */ public class RMILoginClientControl { private RMILoginClientView view; private String serverHost = "localhost"; private int serverPort = 3232; private RMILoginInterface rmiServer; private Registry registry; private String rmiService = "rmiLoginServer"; public RMILoginClientControl(RMILoginClientView view){ this.view = view; view.addLoginListener(new LoginListener()); try{ // lay the dang ki registry = LocateRegistry.getRegistry(serverHost, serverPort); // tim kiem RMI server rmiServer = (RMILoginInterface)(registry.lookup(rmiService)); }catch(RemoteException e){ view.showMessage(e.getStackTrace().toString()); e.printStackTrace(); }catch(NotBoundException e){ view.showMessage(e.getStackTrace().toString()); e.printStackTrace(); } } class LoginListener implements ActionListener { public void actionPerformed(ActionEvent e) { try { User model = view.getUser(); if(rmiServer.checkLogin(model).equals("ok")){ view.showMessage("Đăng nhập thành công!"); }else{ view.showMessage("Tài khoản không tồn tại!"); } } catch (Exception ex) { view.showMessage(ex.getStackTrace().toString()); ex.printStackTrace(); } } } } //ClientRun.java package rmi.client; /** * * @author Ruby */ public class ClientRun { public static void main(String[] args) { RMILoginClientView view = new RMILoginClientView(); RMILoginClientControl control = new RMILoginClientControl(view); view.setVisible(true); } } - Phía RMI.Server //RMILoginInterface.java package rmi.server; import java.rmi.Remote; import java.rmi.RemoteException; import rmi.client.User; /** * * @author Ruby */ public interface RMILoginInterface extends Remote{ public String checkLogin(User user) throws RemoteException; } //RMILoginServerView.java package rmi.server; /** * * @author Ruby */ public class RMILoginServerView { public RMILoginServerView(){ } public void showMessage(String msg){ System.out.println(msg); } } //RMILoginServerControl.java package rmi.server; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import rmi.client.User; /** * * @author Ruby */ public class RMILoginServerControl extends UnicastRemoteObject implements RMILoginInterface{ private int serverPort = 3232; private Registry registry; private Connection con; private RMILoginServerView view; private String rmiService = "rmiLoginServer"; public RMILoginServerControl(RMILoginServerView RemoteException{ this.view = view; getDBConnection("usermanagement", "root", "12345678"); view.showMessage("RMI server is running "); // dang ki RMI server try{ registry = LocateRegistry.createRegistry(serverPort); registry.rebind(rmiService, this); }catch(RemoteException e){ throw e; } } public String checkLogin(User user) throws RemoteException{ String result = ""; if(checkUser(user)) result = "ok"; view) throws return result; } private void getDBConnection(String dbName, String username, String password){ String dbUrl = "jdbc:mysql://localhost:3306/" + dbName; String dbClass = "com.mysql.jdbc.Driver"; try { Class.forName(dbClass); = DriverManager.getConnection (dbUrl, username, password); }catch(Exception e) { view.showMessage(e.getStackTrace().toString()); } } private boolean checkUser(User user) { String query = "Select * FROM users WHERE username ='" + user.getUserName() + "' AND password ='" + user.getPassword() + "'"; try { Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); if (rs.next()) { return true; } }catch(Exception e) { view.showMessage(e.getStackTrace().toString()); } return false; } } //ServerRun.java package rmi.server; /** * * @author Ruby */ public class ServerRun { public static void main(String[] args) { RMILoginServerView view = new RMILoginServerView(); try{ RMILoginServerControl control = new RMILoginServerControl(view); }catch(Exception e){ e.printStackTrace(); } } } Bài 12 Viết chương trình ứng dụng mạng với kỹ thuật dùng đối tượng sản sinh nhiều đối tượng sử dụng RMI Chương trình có cấu trúc sau: − Chương trình server có đối tượng sản sinh đối tượng: Một đối tượng cho phép trả tổng số, đối tượng cho phép trả hiệu số, đối tượng cho phép trả tích số − Chương trình client gọi phương thức từ xa để tính tổng, hiệu tích Bài 13 Viết chương trình ứng dụng mạng sử dụng kỹ thuật RMI Chương trình có cấu trúc sau: − Server có đối tượng có phương thức cho phép gọi từ xa để tính tổng hiệu số nguyên − Server có đối tượng có phương thức cho phép gọi từ xa để tính − tích thương số nguyên Chương trình client cho phép nhập vào từ bàn phím số nguyên, gọi phương thức từ xa để tính tổng, hiệu, tích, thương số hiển thị kết lên hình Bài 14 Viết chương trình ứng dụng mạng sử dụng kỹ thuật RMI Chương trình có cấu trúc sau: − Server có đối tượng có phương thức cho phép gọi từ xa để xếp − dãy số giảm dần Client cho phép nhập vào từ bàn phím dãy số nguyên phân cách dấu “|” gọi phương thức từ xa để xếp dãy số hiển thị kết lên hình Ví du: Client gửi đến: 9|32|1|2 Server gửi trả kết quả: 32|9|2|1 Bài 15 Viết chương trình ứng dụng mạng với kỹ thuật dùng đối tượng sản sinh nhiều đối tượng sử dụng RMI Chương trình có cấu trúc sau: − Chương trình server có đối tượng sản sinh đối tượng: Một đối tượng cho phép trả thời gian nhiệt độ, đối tượng cho phép trả thời gian độ ẩm (giá trị nhiệt độ độ ẩm dùng biểu thức 100*Math.random() để phát sinh ngẫu nhiên giả phỏng) − Chương trình client gọi phương thức từ xa để lấy nhiệt độ, độ ẩm hiển thị Bài 16 Viết chương trình ứng dụng mạng sử dụng kỹ thuật RMI Chương trình có cấu trúc sau: − Server có đối tượng có phương thức cho phép gọi từ xa để in địa − tất máy trạm mạng dựa vào tên miền Client cho phép nhập vào từ bàn phím tên miền hiển thị kết lên hình Bài 17 Viết chương trình thu thập tra cứu thời tiết gồm nhiệt độ, độ ẩm, áp xuất, hướng tốc độ gió Chương trình có cấu trúc sau: - - Bài 18 Phần 1: Phần thu thập liệu thời tiết sử dụng kỹ thuật RMI Chương trình client quét qua tất máy trạm ( server) cách gọi phương thức từ xa cất kết xuống sở liệu SQL ( dữz liệu cách gọi hàm phát sinh ngẫu nhiên) Phần II: Phần tra cứu thời tiết sử dụng TCP Socket với chương trình server cho phép đáp ứng nhiều kết nối đồng thời Chương trình client cho phép nhập vào mã vùng cần tra cứu thời tiết gửi tới server, server truy xuất sở liệu có từ phần trả client ghi thời tiết tương ứng Tương tự client RMI hiển thị liệu dạng bảng, client socket sử dụng giao diện đồ họa Lưu ý: Sinh viên cần tham khảo them lý thuyết tập phần WebService Enterprise ... inFromServer.close(); //dong socket client ClientSocket.close(); } } //Chương trình phía Server /* * chuong trinh tinh tong so kieu integer tu Client gui len server */ package tinhtong; import java.io.DataInputStream;

Ngày đăng: 04/07/2017, 23:02

Xem thêm: Đề cương ôn tập lập trình mạng (Phần bài tập)

TỪ KHÓA LIÊN QUAN

w