TIỂU LUẬN MÔN HỌC LẬP TRÌNH MẠNG LỰA CHỌN ĐỀ THI TỪ XA ( có kèm theo code) MỤC LỤC MỤC LỤC 1 LỜI MỞ ĐẦU 2 CHƯƠNG 1 3 NGHIÊN CỨU NHỮNG VẤN ĐỀ CƠ BẢN VỀ 3 LẬP TRÌNH JAVA TRÊN MẠNG 3 1.1. Tìm hiểu ngôn ngữ lập trình Java. 3 1.2. Liên lạc trên Internet. 3 1.2.1. Họ giao thức TCPIP (Transmision Control ProtocolInternet Protocol). 3 1.2.2. Chuyển dữ liệu trên mạng và giao thức UDP (User Datagram Protocol). 4 1.3. Giao tiếp trên mạng theo mô hình kháchchủ (ClientServer) và khái niệm Socket. 4 1.4. Thư viện Java.net và sử dụng TCP Socket. 6 1.4.1. Tìm hiểu một số lớp cần thiết của gói thư viện Java.net. 6 CHƯƠNG 2 10 BÀI TOÁN “LỰA CHỌN ĐỀ THI TỪ XA” 10 2.1. Mô tả bài toán “Lựa chọn đề thi từ xa”. 10 2.2. Phân tích bài toán. 10 2.3. Các bước của chương trình. 10 2.4. Demo chương trình 14 PHẦN KẾT LUẬN 17 TÀI LIỆU THAM KHẢO 18 LỜI MỞ ĐẦU Thời đại ngày nay, Công nghệ thông tin chiếm lĩnh một vị trí hàng đầu trong hệ thống khoa học kỹ thuật, đồng thời nó đóng góp tích cực cho mọi sự thành công của mọi lĩnh vực khác trong đời sống xã hội. Qua quá trình tiếp nhận, lĩnh hội, tìm hiểu và nghiên cứu những kiến thức về hệ tin học phân tán, lập trình mạng và được sự hướng dẫn tận tình của PGS.TS Lê Văn Sơn. Nhóm chúng tôi chọn thực hiện đề tài “Lựa chọn đề thi từ xa”. Đây là một bài toán khá hấp dẫn, phù hợp với xu thế hiện nay và mang tính thực tế cao. Nội dung đề tài này bao gồm: Chương 1: Nghiên cứu những vấn đề cơ bản về lập trình Java trên mạng. Chương 2: Tìm hiểu bài toán “Lựa chọn đề thi từ xa” Trong một thời gian ngắn, chúng tôi bước đầu làm quen với ngôn ngữ lập trình Java để giải quyết một bài toán lớn nên không thể tránh khỏi được những hạn chế và sai sót. Rất mong sự góp ý quý báu của Thầy và các bạn để đề tài được hoàn thiện và đáp ứng thực tế hơn.
Tiểu luận: Lập trình Mạng GVHD:PGS.TS. Lê Văn Sơn TIỂU LUẬN MÔN HỌC LẬP TRÌNH MẠNG Đề tài: LỰA CHỌN ĐỀ THI TỪ XA GVHD: PGS.TS. Lê Văn Sơn HVTH: Lê Hồng Dũng Lê Thị Thu Hà HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 1 Tiểu luận: Lập trình Mạng GVHD:PGS.TS. Lê Văn Sơn MỤC LỤC TIỂU LUẬN MÔN HỌC LẬP TRÌNH MẠNG 1 Đề tài: 1 LỰA CHỌN ĐỀ THI TỪ XA 1 GVHD: PGS.TS. Lê Văn Sơn 1 HVTH: Lê Hồng Dũng 1 Lê Thị Thu Hà 1 MỤC LỤC 2 LỜI MỞ ĐẦU 3 CHƯƠNG 1 4 NGHIÊN CỨU NHỮNG VẤN ĐỀ CƠ BẢN VỀ 4 LẬP TRÌNH JAVA TRÊN MẠNG 4 1.1. Tìm hiểu ngôn ngữ lập trình Java 4 1.2. Liên lạc trên Internet 4 1.2.1. Họ giao thức TCP/IP (Transmision Control Protocol/Internet Protocol) 4 1.2.2. Chuyển dữ liệu trên mạng và giao thức UDP (User Datagram Protocol) 5 1.3. Giao tiếp trên mạng theo mô hình khách/chủ (Client/Server) và khái niệm Socket 5 CHƯƠNG 2 11 BÀI TOÁN “LỰA CHỌN ĐỀ THI TỪ XA” 11 2.1. Mô tả bài toán “Lựa chọn đề thi từ xa” 11 2.2. Phân tích bài toán 11 2.3. Các bước của chương trình 11 2.4. Demo chương trình 15 PHẦN KẾT LUẬN 18 TÀI LIỆU THAM KHẢO 19 HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 2 Tiểu luận: Lập trình Mạng GVHD:PGS.TS. Lê Văn Sơn LỜI MỞ ĐẦU Thời đại ngày nay, Công nghệ thông tin chiếm lĩnh một vị trí hàng đầu trong hệ thống khoa học kỹ thuật, đồng thời nó đóng góp tích cực cho mọi sự thành công của mọi lĩnh vực khác trong đời sống xã hội. Qua quá trình tiếp nhận, lĩnh hội, tìm hiểu và nghiên cứu những kiến thức về hệ tin học phân tán, lập trình mạng và được sự hướng dẫn tận tình của PGS.TS Lê Văn Sơn. Nhóm chúng tôi chọn thực hiện đề tài “Lựa chọn đề thi từ xa”. Đây là một bài toán khá hấp dẫn, phù hợp với xu thế hiện nay và mang tính thực tế cao. Nội dung đề tài này bao gồm: -Chương 1: Nghiên cứu những vấn đề cơ bản về lập trình Java trên mạng. -Chương 2: Tìm hiểu bài toán “Lựa chọn đề thi từ xa” Trong một thời gian ngắn, chúng tôi bước đầu làm quen với ngôn ngữ lập trình Java để giải quyết một bài toán lớn nên không thể tránh khỏi được những hạn chế và sai sót. Rất mong sự góp ý quý báu của Thầy và các bạn để đề tài được hoàn thiện và đáp ứng thực tế hơn. HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 3 Tiểu luận: Lập trình Mạng GVHD:PGS.TS. Lê Văn Sơn CHƯƠNG 1 NGHIÊN CỨU NHỮNG VẤN ĐỀ CƠ BẢN VỀ LẬP TRÌNH JAVA TRÊN MẠNG 1.1. Tìm hiểu ngôn ngữ lập trình Java. Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình hoạt động cho máy tính, máy gia dụng là rất cần thiết. Tuy nhiên việc chọn một ngôn ngữ thích hợp lại là một vấn đề không đơn giản. Có rất nhiều ngôn ngữ lập trình như ADA, COBOL, Basic, Visual Basic, Pascal, C, C ++ , …. Mỗi ngôn ngữ đều có các yêu cầu về cấu trúc, văn phạm riêng và không dễ dàng chúng ta có thể nắm bắt được tất cả. Java cũng không nằm ngoài “luồng xoáy” của công nghệ thông tin hiện nay. Khi mới ra đời với phiên bản 1.0 (vào năm 1995) Java đã được coi như một cách tân vĩ đại của thế giới Tin học. Dù rằng không ít người cho rằng Java là một “Quốc tế ngữ” của Tin học, dễ học, dễ dùng, nhưng một khi chúng ta đã đến với Java mới khám phá được những nét độc đáo của nó, đây là một con đường mới mẻ và đẹp đẽ nhưng không ít các khái niệm phức tạp, nhiều gai góc, dòi hỏi chúng ta vẫn phải làm việc, nghiên cứu nhiều và rất nhiều mới có thể nắm bắt, khai thác và điều khiển được Java. “Java là một ngôn ngữ đơn giản, hướng đối tượng, phân tán, thông dịch, mạnh mẽ, bảo mật, cấu trúc độc lập, khả chuyển, hiệu quả cao và linh động” (The Java TM Language: An Overview – Sun Mycrosystems/1995). Sự hỗ trợ lập trình hướng đối tượng là cốt lõi của java. Mọi hoạt động, mọi câu lệnh của Java đều phải tác động lên và qua các đối tượng. Mà tượng trưng cho chúng là các lớp (class). Đối tượng chính là những mẫu của lớp và lớp có thể được xem như một cái khuôn đúc nên các đối tượng. Do vậy Java đáp ứng khá đầy đủ những công cụ cần thiết cho lập trình mạng mà đặc biệt là trong hệ tin học phân tán. 1.2. Liên lạc trên Internet. 1.2.1. Họ giao thức TCP/IP (Transmision Control Protocol/Internet Protocol). Để hai hay nhiều máy tính trao đổi thông tin được với nhau dòi hỏi giữa chúng phải có một ngôn ngữ chung: Chẳng hạn máy này phải gửi những tín hiệu gì đó đến máy kia và máy kia phải gửi trả lời lại những tín hiệu nào để nhận biết được với nhau. Trên Internet ngày nay việc hai hay nhiều máy có thể trao đổi qua lại nhau đa số đều dựa theo quy ước giao thức cốt lõi là TCP/IP. Theo giao thức này mỗi máy sẽ được đặt cho một địa chỉ (số) riêng biệt gọi là địa chỉ IP và nó có vai trò tương tự như số điện thoại. Các địa chỉ IP này là duy nhất ứng với mỗi máy (trên toàn thế giới) và phải được đăng ký với tổ chức quốc tế InterNIC (Internet Network Information Center) để nhận được một số IP riêng biệt khi tham gia vào hệ thống Internet. Giao thức TCP gửi từng gói dữ liệu đi, nơi nhận theo giao thức này phải có trách nhiệm thông báo và kiểm tra xem dữ liệu đã đến đủ hay không, có lỗi hay không có lỗi. Trước khi chuyển dữ liệu bao giờ cũng có sự kết nối giữa máy gửi và máy nhận. Do phải bảo đảm dữ liệu được truyền chính xác và luôn duy trì kết nối nên sử dụng giao thức TCP cần chiếm thêm một số tài nguyên của hệ thống và cách lập trình cho giao thức này khá phức tạp. HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 4 Tiểu luận: Lập trình Mạng GVHD:PGS.TS. Lê Văn Sơn Truyền dữ liệu theo giao thức TCP thường được áp dụng cho các dịch vụ như truyền tập tin, các dịch vụ trực tuyến trên Internet đòi hỏi độ tin cậy cao. Hình 1: Mô hình Họ giao thức TCP/IP 1.2.2. Chuyển dữ liệu trên mạng và giao thức UDP (User Datagram Protocol). Quá trình chuyển dữ liệu trên mạng diễn ra hết sức phức tạp. Chi tiết quá trình này được xem như tương tự trong thực tế khi ta gửi thư hay bưu phẩm. Trước hết phải ghi rõ địa chỉ nơi đến (địa chỉ IP của máy chủ), sau đó có thể gửi thông thường hay gửi bảo đảm. Cách chuyển dữ liệu bảo đảm dựa vào giao thức TCP còn cách chuyển không bảo đảm dựa vào giao thức UDP. Giao thức UDP ngược lại với TCP là không có sự bảo đảm nên có độ tin cậy thấp, vì nó không đòi hỏi sự kết nối trước nào giữa nơi gửi và nơi nhận. Dữ liệu gửi đi được mặc định rằng máy tính ở đầu nhận luôn ở trạng thái sẵn sàng để tiếp đón dữ liệu gửi đến. Nếu dữ liệu gửi đến bị lỗi trong quá trình truyền hay không nhận được đầy đủ giao thức UDP cũng không có thông báo gì cho nơi gửi. Tuy nhiên UDP không đòi hỏi nhiều tài nguyên của hệ thống và cách lập trình lại tỏ ra đơn giản. Truyền dữ liệu theo giao thức UDP thường được dùng trong những ứng dụng không đòi hỏi sự chính xác cao như dịch vụ thông báo giờ, tỉ giá, dịch vụ gửi tin nhắn,… 1.3. Giao tiếp trên mạng theo mô hình khách/chủ (Client/Server) và khái niệm Socket. Giao tiếp theo mô hình khách/chủ: Sự giao tiếp trên mạng giữa các máy đòi hỏi phải được kết nối vào Internet thông qua dịch vụ của nhà cung cấp (ISP). Các nhà dịch vụ này đóng vai trò như những máy chủ (Server) giúp dễ dàng truy cập dữ liệu từ những vùng khác nhau trên mạng. HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 5 S 3 S 1 S 4 S 2 Họ giao thức TCP/IP Tiểu luận: Lập trình Mạng GVHD:PGS.TS. Lê Văn Sơn Một khi đã tham gia vào Internet, thông tin từ Internet có thể được truy cập bằng nhiều hình thức khác nhau, chỉ cần cho biết địa chỉ của máy chủ (nơi mà ta muốn truy cập thông tin) và loại yêu cầu nếu thỏa mãn thì máy chủ sẽ cung cấp. Có rất nhiều dịch vụ hỗ trợ trên Internet như e-mail, nhóm tin (newsgroup), chuyển tập tin (file transfer), đăng nhập từ xa (remote login), truy tìm các trang Web,…. Những dịch vụ này được tổ chức và kiến trúc đều theo mô hình khách/chủ (Client/Server). Các chương trình ở máy khách (Client) như trình duyệt (Web browser) hay chương trình gửi nhận e-mail sẽ tạo ra kết nối (Connection) với một máy chủ (Server) ở xa, sau đó gửi các yêu cầu đến máy chủ, các chương trình dịch vụ này sẽ gởi kết qủa ngược về cho máy khách và thông thường một dịch vụ trên máy chủ liên tục phục vụ cho nhiều máy khách khác nhau trong hệ thống mạng. Hình 2: Mô hình giao tiếp Client/Server. Khái niệm Socket: Theo sự phân tích trên đây đòi hỏi chúng ta muốn lập trình mạng thì phải biết sử dụng các loại giao thức tuỳ theo yêu cầu đặt ra là hướng có kết nối hay không có kết nối. Trước khi yêu cầu một dịch vụ trên máy chủ thực hiện điều gì đó máy khách phải có khả năng kết nối được với máy chủ. Quá trình kết nối này được Java thực hiện thông qua một cơ chế trừu tượng hóa gọi là Socket (tạm dịch là “cơ chế ổ cắm”). Việc kết nối giữa máy khách và máy chủ tương tự như việc cắm phích điện vào ổ cắm điện và máy khách được coi như phích cắm điện còn máy chủ là ổ cắm điện. Vì thế một máy chủ có thể kết nối và phục vụ cho rất nhiều máy khách. Nếu kết nối Socket thành công thì máy khách và máy chủ được trao đổi dữ liệu với nhau thông qua các yêu cầu về dịch vụ trên máy chủ. Việc kết nối theo cơ chế socket cần biết hai thông tin chủ yếu đó là địa chỉ của máy cần kết nối và số hiệu cổng của chương trình dịch vụ. Java đã cung cấp lớp Socket và ServerSocket đầy đủ trong gói thư viện Java.net. Socket là điểm kết thúc trong quá trình truyền nhận dữ liệu giữa hai quá trình. Khi cần gửi dữ liệu đi, các quá trình ghi dữ liệu vào socket, khi có dữ liệu đến, quá trình sẽ đọc socket để lấy dữ liệu ra. Việc truyền nhận giữa hai socket sẽ tuân theo nghi thức TCP/IP. Các socket có thể liên lạc với nhau theo giao thức UDP hay TCP. HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 6 Tiểu luận: Lập trình Mạng GVHD:PGS.TS. Lê Văn Sơn Socket API cung cấp hai dịch vụ chuyển dữ liệu: Unreliable Datagram, Reliable, byte Stream-Oriented. Socket là "Cửa" nằm giữa process ứng dụng và End-End Transport protocol (UDP hay TCP). TCP service: dịch vụ truyền tin chuỗi byte giữa hai process Hình 3: Mô hình truyền dữ liệu sử dụng Socket trên môi trường TCP. 1.4. Thư viện Java.net và sử dụng TCP Socket. 1.4.1. Tìm hiểu một số lớp cần thiết của gói thư viện Java.net. Lớp InetAddress: Vì địa chỉ Internet theo số IP và theo tên thường dùng khi kết nối vào mạng, cho nên Java xây dựng hẳn một lớp InetAddress dành riêng cho việc quản lý địa chỉ theo tên và theo số. Lớp InetAddress cung cấp các phương thức static thông dụng nhất dùng để chuyển đổi và truy xuất địa chỉ IP: //Trả về đối tượng InetAddress là địa chỉ của máy cục bộ (local host): +public static InetAddress getLocalHost() Throws unknownHostExceptiongetByName //Nhận địa chỉ của một máy bằng kiểu chuỗi và trả về đối tượng InetAddress: +public static InetAddress getByName(String host) Throws unknownHostException //Nhận địa chỉ của một máy bằng kiểu chuỗi và trả về cho tất cả các đối tượng InetAddress: +public static InetAddress [] getAllByName(String host) Throws unknownHostException //Trả về địa chỉ IP của đối tượng InetAddress dướ dạng một dãy các file: +public byte [] getAddress //Trả về địa chỉ IP của đối tượng InetAddress dưới dạng chuỗi: +public String getHostAddress() HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 7 Tiểu luận: Lập trình Mạng GVHD:PGS.TS. Lê Văn Sơn Lớp Socket: //Tạo ra một Socket theo địa chỉ host và số cổng port: +public socket(String host,int port) Throws unknownHostException, IOException //Tạo một Socket nối từ địa chỉ là đối tượng InetAddress và số cổng port: +public socket(InetAddress address, int port) Throws IOException //Tạo một Socket nối theo địa chỉ host, số cổng port với tham số stream: +public Socket(String host, int port, boolean stream) Throws IOException //Lấy về luồng nhập để máy khách đọc dữ liệu trả về từ máy chủ: +InputSteam getInputStream() Throws IOException //Lấy về luồng xuất để máy khách ghi dữ liệu gửi đến máy chủ: +OutputSteam getOutputStream() Throws IOException //Lấy địa chỉ kết nối Socket của máy chủ: +InetAddress getInetAddress() //Lấy về số cổng dùng kết nối của máy chủ: +int getport() //Cắt đức kết nối với máy chủ: +synchronized void close() Throws IOException Lớp ServerSocket: Lớp ServerSocket dùng tạo kết nối từ phía máy chủ với các máy khách. Đối tượng ServerSocket được tạo ra trên máy chủ và lắng nghe những kết nối từ phía máy khách gửi đến theo một số cổng định trước. //Đối tượng ServerSocket nhận biết tín hiệu từ máy khách thông qua cổng port: +public ServerSocket(int port) Throws IOException //Chờ đợi kết nối từ các máy khác nhờ đến phương thức accept: +Socket accept() Throws IOException HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 8 Tiểu luận: Lập trình Mạng GVHD:PGS.TS. Lê Văn Sơn //Máy chủ có thể cắt đức mọi kết nối bằng phương thức close của đối tượng ServerSocket: +pulic void close() Throws IOException Lớp DatagramSocket: Lớp DatagramSocket dùng để chuyển đi một gói dữ liệu theo giao thức UDP. Dữ liệu được gửi đikhông đảm bảo được nhận đầy đủ và có thể bị lỗi trên đường truyền. //Khởi dựng để tạo kết nối UDP: +public datagramSocket() Throws IOException //Khởi dựng để tạo kết nối UDP với số hiệu cổng port: +public DatagramSocket(int port) Throws IOException //Gửi gói dữ liệu đi: +public void synchronĩed sen(Datagrampackage p) Throws IOException //Nhận gói dữ liệu về: +public void synchronized receive(DatagramPackage p) Throws IOException //đóng kết nối: +public void synchronized close() Lớp DatagramPackage: Lớp DatagramPackage dùng cho một gói chứa dữ liệu chuyển đi trên mạng theo kết chiều dài gói, các địa chỉ IP và số cổng mà từ đó gói dữ liệu được gửi đi. //Khởi dựng tạo gói dữ liệu chứa trong bộ đệm buff[] và chiều dài gói dữ liệu len: +public Datagrampackage(byte buff[], int len) //Trả về địa chỉ chứa trong gói dữ liệu: +public InetAddress getAddress() // Trả về thật sự dữ liệu chứa trong gói: +public byte[] getData() //Trả về kích thước hay chiều dài gói dữ liệu: +public int getLength() //Trả về số hiệu cổng chứa trong gói dữ liệu: +public int getPort() HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 9 Tiểu luận: Lập trình Mạng GVHD:PGS.TS. Lê Văn Sơn Lớp URL: URL (Uniforn Resource Locator) là địa chỉ định vị tài nguyên trên mạng, thường một URL bao gồm ba phần: phần nghi thức (protocol), phần địa chỉ hay tên máy chủ (host name) và phần chỉ định tên tập tin hay tài liệu muốn lấy từ máy chủ về. Java đóng gói tất cả những đặc điểm này vào một lớp URL. //Tạo một đối tượng URL từ địa chỉ định vị là một chuỗi: +public URL(String spec) throws MalformedURLException //Tạo địa chỉ định vị tuyệt đối: +public URL(String protocol, String host, int port, String file) throws MalformedURLException //Lấy nội dung mà kết nối theo địa chỉ URL có được: +public final object getContent() Throws IOException //Lấy về thành phần tên tập tin hay tài liệu trong chuỗi địa chỉ URL: +String getFile() //Lấy tên máy chủ: +String getHost() //Lấy về tên giao thức: +String getProtocol() //Lấy về số hiệu cổng: +String getPort() //Lấy về nội dung tham khảo thêm trong chuỗi URL: +String getref() //Mở rộng luồng nhập để đọc thông tin trả về từ máy chủ: +public final InputStream opentStream() Throws IOException HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 10 [...]... là có client chọn đề thi này truớc đó HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 17 Tiểu luận: Lập trình Mạng GVHD:PGS.TS Lê Văn Sơn PHẦN KẾT LUẬN Mô hình Client/Server được áp dụng rộng rãi trong lập trình mạng và ngôn ngữ lập trình Java đã hỗ trợ đầy đủ các chức năng lập trình hướng đối tượng để giải quyết tốt công việc của người lập trình Qua một thời gian tiếp cận với môn học lập trình mạng do PGS.TS... khoá học (hoặc gần kết thúc), trung tâm lập danh sách cho các học viên được dự thi, tạo tên truy nhập và tài khoản truy nhập ngẫu nhiên cho từng học viên Thông tin trên được gửi tới cho các học viên để truy cập vào hệ thống khi dự thi Ngày thi, học viên sau khi vào hệ thống qua tài khoản sẽ được lựa chọn đề thi cho mình Các câu hỏi được lấy ngẫu nhiên từ ngân hàng đề Bài toán lựa chọn đề thi từ xa là.. .Tiểu luận: Lập trình Mạng GVHD:PGS.TS Lê Văn Sơn CHƯƠNG 2 BÀI TOÁN “LỰA CHỌN ĐỀ THI TỪ XA 2.1 Mô tả bài toán Lựa chọn đề thi từ xa Ở một đơn vị đào tạo từ xa có nhiều dịch vụ khác nhau như đăng ký , tổ chức đào tạo, kiểm tra đánh giá, thi hết học phần… qua hệ thống mạng trên mô hình khách/chủ (Client/Server) Như vậy để đáp ứng được... một hàng đợi để trích chọn và lưu đề thi • Tạo các gói câu hỏi theo từng đề thi Tại mỗi Client: • Tạo luồng kết nối được với Server để gửi số đề thi lên cho Server • Nhận gói đề thi do Server chuyển đến 2.3 Các bước của chương trình Quá trình thực hiện bài toán trong chương trình được thực hiện như sau: HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 11 Tiểu luận: Lập trình Mạng GVHD:PGS.TS Lê Văn Sơn Bước1:... có cơ hội tìm hiểu, nghiên cứu ngôn ngữ lập trình Java và môn học lập trình mạng này Tuy bước đầu, chỉ mới tiếp cận, tìm hiểu Java và bước đầu thử ứng dụng Java để giải quyết một bài toán trong thực tế Lựa chọn đề Thi từ xa qua mạng nên đề tài không tránh khỏi hạn chế và sai sót Chương trình ứng dụng còn dừng lại ở mức độ cơ bản: mới thực hiện được yêu cầu giả lập Server và Client, tạo kết nối giữa... từ phía các Client Khởi động Kiểm tra kết nối Gửi truy vấn (số đề thi lựa chọn) Nhận truy vấn Kiểm tra đề thi đã được lựa chọn bởi 1 Client khác hay chưa Nếu đã được lựa chọn bởi 1 client khác, thì yêu cầu Client gửi lại truy vấn Nếu đề thi chưa được lựa chọn bởi một client nào truớc đó thì Server kết nối cơ sở dữ liệu, trả về nội dung đề thi tuơng ứng cho client Trả kết quả về lại cho client Nhận kết... cần thi t sau: Tại Server: • Tạo luồng sẵn sàng kết nối được với các Client • Soạn sẵn một ngân hàng đề thi theo nhiệm vụ đào tạo (Ngân hàng đề thi được soạn trước với cấu trúc theo từng tên đề cụ thể Mỗi đề thi lại gồm nhiều câu hỏi khác nhau được lưu vào ngân hàng đề trên cơ sở mỗi bài được chỉ số hóa: • Tạo hàm để truy xuất đề thi theo tên đề thi mà Client gửi lên • Tạo một hàng đợi để trích chọn. .. gửi cho máy chủ về thông tin đăng ký đề thi của mình • Tại máy chủ đã sẵn có một ngân hàng đề thi, khi đồng ý yêu cầu của khách thực hiện chọn đề thi một cách ngẫu nhiên từ ngân hàng đề và đóng gói đề thi chuyển cho khách để tiến hành quá trình thi 2.2 Phân tích bài toán Yêu cầu của bài toán: Để đáp ứng sự trao đổi thông tin giữa khách/chủ và máy chủ đáp ứng yêu cầu thi của máy khách đòi hỏi tại máy chủ... Trang 14 Tiểu luận: Lập trình Mạng GVHD:PGS.TS Lê Văn Sơn 2.4 Demo chương trình Khi chạy chương trình Server, giao diện của sever sẽ là Khi chạy chương trình Client, giao diện sẽ hiển thị được địa chỉ Server mà nó đang kết nối đến, cụ thể ở đây là Server 127.0.0.1 HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 15 Tiểu luận: Lập trình Mạng GVHD:PGS.TS Lê Văn Sơn Lúc này Server cũng nhận được kết nối từ phía... • Client gửi yêu cầu về số đề thi đến Server Bước 3: • Server chấp nhận yêu cầu của Client, nếu không phải thông báo: • Server truy xuất đề thi theo yêu cầu và quy định số câu hỏi của đề thi Bước 4: • Server chuyển gói đề thi đã được trích chọn cho Client • Kết thúc quy trình chuyển giao đề thi Sơ đồ các bước thực hiện như sau: Client Server Khởi động/lắng nghe các yêu cầu từ phía các Client Khởi động . Client, giao diện sẽ hiển thị được địa chỉ Server mà nó đang kết nối đến, cụ thể ở đây là Server 127. 0.0.1 HVTH: Lê Hồng Dũng – Lê Thị Thu Hà Trang 15 Tiểu luận: Lập trình Mạng GVHD:PGS.TS. Lê Văn