bài tập lớn lập trình mạng http server

7 753 19
bài tập lớn lập trình mạng http server

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

Thông tin tài liệu

Lời Mở Đầu Lập trình mạng là 1 môn học rất hữu ích, giúp cho sinh viên nắm được các kiến thức cơ sở về các kĩ thuật lập trình mạng TCPIP từ đó có thể lập trình được các ứng dụng có kết nối, truyền thông sử dụng mạng ở mức Socket. Nhằm muốn tìm hiểu sâu hơn và muốn thực hiện 1 ứng dụng cụ thể khi học môn lập trình mạng, nhóm chúng em đã chọn đề tài : lập trình HTTP Sever đơn giản sử dụng thư viện WinSock Chương trình nhóm thực hiệnsẽ tự biến máy tính thành một máy chủ HTTP server có khả năng thực hiện một số chức năng đơn giản là: • Duyệt toàn bộ file có trong một cây thư mục dưới dạng 1 list các đường dẫn trong một trang HTML để hiển thị trên Browser . • Hiển thị cấu hình máy (máy server) trên cùng trang HTML. • Cho phép tải về file có trong cây thư mục đó. Chương trình của nhóm được viết bằng ngôn ngữ C++ sử dụng công cụ Visual Studio để lập trình Trong quá trình thực hiện, nhómcó tham khảo 1 số tài liệu : • http:msdn.microsoft.com : Đặc tả các hàm và hằng số. • http:social.msdn.microsoft.com, http:stackoverflow.com : Các câu hỏi, bài viết của cộng đồng có liên quan tới chủ đề. Phần 1 : Phân tích các kỹ thuật sử dụng trong chương trình A. Truy nhập mạng Phần mềm sử dụng các hàm của bộ hàm của thư viện Winsock để thực hiện truy nhập mạng. Thư viện Winsock được Include vào phần mềm bằng khai báo: pragma comment(lib, ws2_32.lib) include Các phương thức được sử dụng: • socket() : Khởi tạo một socket với mục đích lắng nghe, chấp nhận một kết nối mạng hoặc gửinhận dữ liệu qua socket kết nối đã tạo dưới một dòng byte. • bind(): Gắn socket vào một giao diện mạng đã khai báo trong cấu trúc SOCKADDR_IN. • listen(): Lắng nghe kết nối tới socket. • accept(): Chấp nhận kết nối tới socket. • receive(): Lấy dữ liệu gửi tới từ socket. • send(): Gửi dữ liệu thông qua socket đã chấp nhận. • closesocket(), WSACleanup(): Giải phóng các tài nguyên đã cấp cho socket. • select(): Kiểm tra trạng thái của các socket, đợi nếu cần thiết, thực hiện vào ra một cách độc lập, không đông bộ (asynchronous)

Lời Mở Đầu Lập trình mạng môn học hữu ích, giúp cho sinh viên nắm kiến thức sở kĩ thuật lập trình mạng TCP/IP từ lập trình ứng dụng có kết nối, truyền thông sử dụng mạng mức Socket Nhằm muốn tìm hiểu sâu muốn thực ứng dụng cụ thể học môn lập trình mạng, nhóm chúng em chọn đề tài : lập trình HTTP Sever đơn giản sử dụng thư viện WinSock Chương trình nhóm thực tự biến máy tính thành máy chủ HTTP server có khả thực số chức đơn giản là: • • • Duyệt toàn file có thư mục dạng list đường dẫn trang HTML để hiển thị Browser Hiển thị cấu hình máy (máy server) trang HTML Cho phép tải file có thư mục Chương trình nhóm viết ngôn ngữ C++ sử dụng công cụ Visual Studio để lập trình Trong trình thực hiện, nhóm có tham khảo số tài liệu : • • http://msdn.microsoft.com : Đặc tả hàm số http://social.msdn.microsoft.com, http://stackoverflow.com : Các câu hỏi, viết cộng đồng có liên quan tới chủ đề Phần : Phân tích kỹ thuật sử dụng chương trình A Truy nhập mạng Phần mềm sử dụng hàm hàm thư viện Winsock để thực truy nhập mạng Thư viện Winsock Include vào phần mềm khai báo: #pragma comment(lib, "ws2_32.lib") #include Các phương thức sử dụng: • • • • • • • • socket() : Khởi tạo socket với mục đích lắng nghe, chấp nhận kết nối mạng gửi/nhận liệu qua socket kết nối tạo dòng byte bind(): Gắn socket vào giao diện mạng khai báo cấu trúc SOCKADDR_IN listen(): Lắng nghe kết nối tới socket accept(): Chấp nhận kết nối tới socket receive(): Lấy liệu gửi tới từ socket send(): Gửi liệu thông qua socket chấp nhận closesocket(), WSACleanup(): Giải phóng tài nguyên cấp cho socket select(): Kiểm tra trạng thái socket, đợi cần thiết, thực vào cách độc lập, không đông (asynchronous) B Lấy thông số máy Thư viện hỗ trợ: iostream Để lấy thông số cấu hình máy, ta sử dụng lệnh (Command) window systeminfo Khi lệnh thực thi, để lấy kết dạng xâu, ta sử dụng hàm _popen() để thực lệnh từ mã phần mềm FILE *pPipe; if ((_popen("cd C:\\", "rt")) == NULL) exit(1); if ((pPipe = _popen("systeminfo", "rt")) == NULL) exit(1); Hàm trả trỏ FILE, sau đọc kết hàm fread() C Duyệt file Khi nhập đường dẫn vào Browser, Browser gửi Request tới Server có dạng “localhost:/Folder/File.exten” Tách lấy phần sau ta có đường dẫn thư mục có máy tính Ví dụ: D:/Uploaded/aaa.txt Ta sử dụng hàm GetFileAttributesA() để xác định xem đường dẫn nhận thư mục hay file * Nếu đường dẫn thư mục con: Sau có đường dẫn thư mục, ta sử dụng hàm FindFirstFileA(),FindNextFileA() để lấy tên thư mục file có thư mục Sau với thư mục/file , ta viết vào xâu char* buffer gửi đoạn ký tự có cấu trúc: "đường dẫn" Cuối thêm vào buffer thẻ , , , thêm phần header: "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=ISO-8859-4 \r\n\r\n" Và gửi buffer tới địa đích socket * Nếu đường dẫn file Mở file có đường dẫn nhận dạng xâu char FILE* f = fopen(dirpath, "r"); fseek(f, 0, SEEK_END); size_t size = ftell(f); char* buffer = new char[size]; rewind(f); fread(buffer, sizeof(char), size, f); close(f); Thêm phần header cho xâu trả về: "HTTP/1.1 200 OK\r\nAccept-Range:bytes\r\nConnection:keepalive\r\nContent-Type: application/octet-stream\r\nContentLength:lengthr\nContent-Disposition: attachment; filename=\"filename\"\r\ncharset=ISO-8859-4; \r\n\r\n" Với length độ dài xâu đọc từ file filename tên file lấy từ đường dẫn gửi xâu tới địa đích socket Phần Giao diện Khi người dùng nhập đường dẫn “localhost:9999/” Browser, trang hiển thị dạng file HTML trả phần mềm hiển thị Browser Trang gồm phần: A Danh sách duyệt file Danh sách duyệt file có dạng danh sách đường dẫn (link) có tên toàn file thư mục có thư mục Danh sách duyệt file Click vào đường dẫn hiển thị toàn file có bên đường dẫn hiển thị Folder, download file đường dẫn file B Phần hiển thị cấu hình máy Phần hiển thị cấu hình máy gửi từ phần mềm cho phép xem thông số máy tính sử dụng làm server như: Tên máy, tên, phiên hệ điều hành, nhà sản xuất, dòng máy, dung lượng nhớ chính,

Ngày đăng: 24/05/2016, 14:47

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan