Tải bản đầy đủ (.docx) (7 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (241.28 KB, 7 trang )

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 TCP/IP 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ện sẽ 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óm có tham khảo 1 số tài liệu :



: Đặc tả các hàm và hằng số.
, : 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 <WinSock2.h>
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ửi/nhậ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)

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) của window là
systeminfo.
Khi lệnh đã được thực thi, để lấy kết quả dưới dạng xâu, ta sử dụng hàm _popen()
để thực hiện lệnh từ trong 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ả về một con trỏ FILE, sau đó chúng ta đọc kết quả bằng hàm fread()
C. Duyệt file
Khi nhập đường dẫn vào Browser, Browser sẽ gửi một Request tới Server có dạng
“localhost:/Folder/File.exten”. Tách lấy phần sau ta có đường dẫn của cây
thư mục có trong 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 được là
thư mục con hay file.
* Nếu đường dẫn là thư mục con:
Sau khi đã có đường dẫn cây thư mục, ta sử dụng các hàm
FindFirstFileA(),FindNextFileA() để lần lượt lấy tên của các thư mục và file có
trong cây thư mục hiện tại. Sau đó với mỗi thư mục/file , ta viết vào xâu char*
buffer sẽ gửi đi một đoạn ký tự có cấu trúc:
"<a href=\"đường dẫn\">đường dẫn</a>
"
Cuối cùng thêm vào buffer các thẻ <html>, <body>, <head>, 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ỉ đích bằng socket.



* Nếu đường dẫn là file
Mở file có đường dẫn như đã nhận được dưới dạng một 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 là độ dài xâu đọc được từ file và filename là tên file lấy từ đường dẫn
và gửi xâu tới địa chỉ đích bằng socket.


Phần 2. Giao diện

Khi người dùng nhập đường dẫn “localhost:9999/” trên Browser, trang hiển thị
dưới dạng file HTML được trả về bởi phần mềm và được hiển thị ngay trên
Browser.
Trang gồm 2 phần:

A. Danh sách duyệt file
Danh sách duyệt file có dạng một danh sách các đường dẫn (link) có tên là toàn bộ
các file và thư mục có trong cây thư mục.



Danh sách duyệt file

Click vào đường dẫn sẽ hiển thị toàn bộ các file có bên trong nếu đường dẫn hiển
thị Folder, hoặc download file nếu đường dẫn là một 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 về từ phần mềm cho phép xem các thông số của
máy tính được sử dụng làm server như: Tên máy, tên, phiên bản hệ điều hành, nhà
sản xuất, dòng máy, dung lượng bộ nhớ chính, ...



×