TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
℘℘
BÁO CÁO THỰC TẬP TỐT NGHIỆP
Đề tài:
XÂY DỰNG PHẦN MỀM LỚP HỌC ẢO TRONG
MẠNG LAN
Nhóm sinh viên thực hiện: HOÀNG VĂN VANG
NGUYỄN MẠNH DŨNG
Lớp : ĐH- KHMT1K3
Giảng viên hướng dẫn: TH.S NGUYỄN TIẾN LỢI
Hà Nội, 05/2012
PHIẾU GIAO ĐỀ TÀI
Page | 2
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
màn hình của học viên chỉ bằng thao tác đơn giản giống như trực tiếp giảng viên ngồi
tại máy của học viên …
Do đó việc xây dựng một phần mềm lớp học ảo trong mạng Lan là một việc rất
cần thiết, nhằm hỗ trợ các giảng viên cũng như hỗ trợ các học viên có thể tiếp cận
được với cách học tập trực quan dễ hiểu. Nhận thức được tầm quan trọng cũng như
cấp thiết phải có một hệ thống quản lý các máy tính trong phòng học mạng Lan. Nhóm
chúng em đã đăng ký đề tài “Xây dựng phần mềm lớp học ảo trong mạng Lan”. Với hi
vọng phần mềm sẽ giải quyết được phần nào trong quá trình dạy và học trong phòng
máy sử dụng mạng Lan. Và tiến xa hơn đó là một phần mềm đào tạo thông qua mạng
Internet, ở đó cả học viên và giảng viên có thể truy cập từ bất kỳ máy tính nào được
cài đặt phần mềm việc học tập và giảng dạy sẽ càng trở lên dễ dàng hơn.
Để hoàn thành báo cáo thực tập tốt nghiệp này, chúng em đã được sự giúp đỡ
tận tình của giảng viên hướng dẫn - Th.S Nguyễn Tiến Lợi - Giảng viên khoa CNTT
trường Đại Học Công Nghiệp Hà Nội, Thầy đã tận tình hướng dẫn, góp ý chỉnh sửa rất
chi tiết cho bài báo cáo của chúng em. Chúng em xin chân thành gửi lời cảm ơn sâu
sắc tới Thầy. Xin chúc Thầy và gia đình luôn mạnh khỏe và thạnh phúc.
Page | 4
TÓM TẮT NỘI DUNG BÁO CÁO THỰC TẬP TỐT NGHIỆP
1. Những nội dung sẽ được trình bày trong bài báo cáo.
Đề xuất xây dựng một phần mềm lớp học ảo trong mạng Lan có những chức
năng chính sau đây.
Chia sẻ màn hình giảng dạy.
Chia sẻ tài liệu học tập.
Chat Message.
Điều khiển máy tính từ xa (Remote Desktop).
Hỗ trợ giảng viên một số chức năng và tiện ích khác.
Đưa ra các kiến thức, kỹ thuật cơ bản và quan trọng về lập trình mạng với
Socket và .Net Remoting.
Nghiên cứu các lĩnh vực lập trình nâng cao như các hàm API, lập trình xử lý
ảnh có ứng dụng cụ thể trong bài toán.
Page | 7
MỤC LỤC
PHIẾU GIAO ĐỀ TÀI 2
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 3
LỜI NÓI ĐẦU 4
TÓM TẮT NỘI DUNG BÁO CÁO THỰC TẬP TỐT NGHIỆP 5
DANH SÁCH HÌNH ẢNH 6
DANH MỤC CÁC THUẬT NGỮ VIẾT TẮT 7
MỤC LỤC 8
CHƯƠNG 1. TỔNG QUAN VỀ ĐỀ TÀI 9
CHƯƠNG 2. LÝ THUYẾT CƠ SỞ 13
CHƯƠNG 3. ỨNG DỤNG PHẦN MỀM QUẢN LÝ LỚP HỌC ẢO 50
TÀI LIỆU THAM KHẢO 77
Page | 8
CHƯƠNG 1. TỔNG QUAN VỀ ĐỀ TÀI
1.1. Lý do chọn đề tài.
Hiện nay, với sự phát triển vượt bậc của khoa học công nghệ trong đời sống xã
hội. Việc ứng dụng công nghệ mạng Lan vào trong việc giảng dạy tại các trường Đại
Học, và Cao Đẳng ngày càng phát triển. Nhưng việc quản lý phòng học trong mạng
Lan còn nhiều bất cập.
Tốn kém đầu tư tiền của vào hệ thống máy chiếu, bảng hiện tại.
Khó khăn trong khâu chia sẻ tài liệu học tập.
Giáo viên khó khăn trong quá trình giảng dạy, và giải đáp thắc mắc học
viên.
Không có nhiều sự tương tác giữa giảng viên và học sinh.
Vì vậy xuất phát từ vấn đề đó nhóm chúng em quyết định lựa chọn đề tài “Xây
dựng phần mềm lớp học ảo trong mạng Lan”. Với mong muốn đem lại một phần
mềm giúp tận dụng sức mạnh của CNTT đem lại hiệu quả cho việc giảng dạy trong
các phòng học hiện tại.
1.2. Tình hình nghiên cứu trên thực tế.
Microsoft NetMeeting :
• Ưu điểm : cũng là một phần mềm của hãng Microsoft có hỗ trợ
trên Windows XP nó có thể cho phép người sử dụng dùng để tổ
chức hội thảo, nhìn thấy người nói chuyện với mình, hoặc có thể
chia sẻ tài liệu một cách dễ dàng.
• Nhược điểm : tuy vậy phần mềm còn có khá nhiều vấn đề như nó
không thể xem các máy Client khi cần thiết, mà nó chỉ xem được
danh sách các máy Client. Và một vài khuyết điểm khác như khóa
Usb, quản lý các máy Client khi cần thiết.
1.3. Vấn đề đặt ra của đề tài.
Dựa vào tình hình nghiên cứu các phần mềm trên thực tế chúng ta sẽ tiến hành
xây dựng lên một phần mềm hoàn hảo hơn, nhằm loại bỏ đi những khuyết điểm của
các phần mềm thực tế, và tận dụng hết các điểm mạnh của phần mềm thực tế.
1.3.1. Một số vấn đề về cấu hình của hệ thống.
Một vấn đề không kém phần quan trọng đó là cấu hình cần thiết để thực hiện
chạy ứng dụng phần mềm lớp học ảo trong mạng Lan.
Server Client
Hardware Ram 512 MB
CPU P IV 3.0 GHz
Ram 256 MB
CPU Ce 1.8 GHz
Page | 10
LAN network LAN network
Software
Window XP
SQL Server 2005
.Net framework 3.5
Windows XP.
.Net framework 3.5
Bảng 1. 1. Cấu hình tối thiểu của phòng máy.
dạy tại lớp học trong mạng Lan trở lên dễ dàng và trực quan hơn.
Xây dựng một mô hình cụ thể cho vấn đề đang nghiên cứu. Và đưa mô hình
đó vào ứng dụng thực tế.
1.5. Đối tượng và phương pháp nghiên cứu.
1.5.1. Đối tượng nghiên cứu.
Tìm hiểu các kỹ thuật cơ bản của lập trình mạng với Socket, và .Net
Remoting.
Page | 11
Nghiên cứu về lập trình Thread, lập trình sự kiện Delegate.
Tìm hiểu các kỹ thuật trong lập trình sử dụng các hàm API ứng dụng vào
bài toán lập trình phần mềm lớp học ảo.
Ngoài ra còn nghiên cứu lập trình xử lý ảnh trong C# trong vấn đề giải
quyết bài toán chia sẻ màn hình và điều khiển máy tính từ xa.
1.5.2. Phương pháp nghiên cứu.
Tìm hiểu các kiến thức về lập trình mạng với Socket và .Net Remoting
thông qua các giáo trình, các bài viết về lập trình mạng trên các diễn đàn -
song song với việc tham khảo từ tài liệu của giáo viên hướng dẫn.
Tham khảo các kiến thức về lập trình xử lý ảnh, lập trình các hàm API và
Thread trong sách vở cũng như trên các website.
Tìm kiếm các mã nguồn mở về các mảng cần nghiên cứu trên các website
như codeproject.com, codeplex.com, sourceforge.net, github.com Nhằm
mục đích tìm hiểu về quá trình cài đặt thuật toán xử lý cơ bản và nâng cao
trên ngôn ngữ lập trình C/C++ và C#.
Từng bước nghiên cứu, đánh giá và đề xuất các kỹ thuật sử dụng trong phần
mềm.
Thực nghiệm dựa trên xây dựng ứng dụng và đánh giá các kết quả đã thực
hiên được và những kết quả chưa thực hiện được. Từ đó đưa ra các giải
pháp và các triển vọng của đề tài.
1.6. Dự kiến các kết quả nghiên cứu.
Hoàn thiện quá trình nghiên cứu, đưa ra một số kỹ thuật cơ bản trong quá
các tiến trình khác.
Hình 2. 1: Chức năng của Socket.
2.1.3. Phân loại Socket
Có các loại Socket chính là:
Socket kiểu AF_UNIX chỉ cho phép giao tiếp giữa các tiến trình trong cùng
một máy tính.
Page | 13
Socket kiểu AF_INTET cho phép giao tiếp giữa các tiến trình trên nhưng
máy tính khác nhau trên mạng.
Phân loại theo kiểu kết nối:
Socket hướng kết nối (TCP Socket)
Socket không hướng kết nối (UDP Socket)
2.1.4. Thành phần của một Socket
2.1.4.1. Số hiệu cổng (port number)
Để có thể thực hiện các cuộc giao tiếp, một trong hai tiến trình phải cho biết số
hiệu cổng của socket mà mình sử dụng. Mỗi cổng giao tiếp thể hiện một địa chỉ xác
định trong một hệ thống. Khi tiến trình được gán một số hiệu cổng (Server), nó có thể
nhận dư liệu gởi đến cổng này từ tiến trình khác (Client). Tiến trình còn lại cũng 8 yêu
cầu tạo ra một socket.
2.1.4.2. Địa chỉ IP
Ngoài số hiệu cổng, hai bên giao tiếp còn phải biết địa chỉ IP của nhau. Trong
khi số hiệu cổng dùng để phân biệt các quá trình khác nhau trên cùng một máy tính thì
IP dùng để phân biệt các máy tính khác nhau trên cùng một mạng TCP/IP.
Hình 2. 2. Sơ đồ giao tiếp các máy tính khác nhau.
Trong hình trên, địa chỉ của tiến trình B1 được xác định bằng 2 thông tin: (Host
B, Port B1)
Địa chỉ máy tính có thể là địa chỉ IP dạng 118.69.123.139 hay là địa chỉ theo
dạng domain như www.uit.edu.vn.
Số hiệu cổng gán cho Socket phải là duy nhất trên phạm vi máy đó, có giá
trị trong khoảng từ 0-65535 (16 bits). Trong đó các cổng từ 1-1023 được gọi
2.1.6. Xây dựng ứng dụng Client-Server với Socket:
Socket là phương tiện hiệu quả để xây dựng các ứng dụng theo kiến trúc Client-
Server. Các ứng dụng trên Internet như Web, Mail, FTP . là các ví dụ điển hình.
Page | 15
Chúng ta sẽ tìm hiểu về các bước cơ bản trong việc xây dựng các ứng dụng
Client-Server sử dụng Socket làm phương tiện giao tiếp theo chế độ hướng kết nối
(được ứng dụng trong phần gởi file và gởi hình ảnh trong chương trình).
2.1.6.1. Mô hình Client-Server sử dụng Socket ở chế độ có kết nối (TCP)
Giai đoạn 1: Server tạo Socket, gán số hiệu cổng và lắng nghe các kết nối.
Hình 2. 4. Minh họa quá trình khởi tạo TCP Socket Server.
Socket() : Server yêu cầu tạo ra một Socket để có thể sử dụng các dịch vụ
của tầng vận chuyển.
Bind() : Socket khi được tạo ra cần phải được gắn vào một port cục bộ.
Listen() : Server lắng nghe các yêu cầu kết nối từ Client trên cổng đã được
gán.
Giai đọan 2: Client tạo Socket, yêu cầu thiết lập một nối kết với Server
Hình 2. 5. Mô tả quá trình khởi tạo TCP Socket Client kết nối tới Server.
Socket() : Client yêu cầu tạo một Socket để có thể sử dụng dịch vụ của tầng
vận chuyển, thông thường hệ thống thường tự động gán một port còn dảnh
cho Socket của Client. Nhưng ở đây ta sẽ tự động đưa vào port cho Socket
của Client.
Connect() : Client gửi yêu cầu kết nối tới Server có địa chỉ ip và port xác
định.
Page | 16
Accept() : Sau khi bên phía Client kết nối tới Server thì Server sẽ chấp nhận
kết nối của Client, khi đó một kênh giao tiếp ảo được hình thành. Client và
Server có thể trao đổi thông tin với nhau thông qua kênh giao tiếp ảo này.
Giai đoạn 3: Trao đổi thông tin giữa Client và Server
Hình 2. 6. Mô tả quá trình truyền nhận thông tin giữa Server và Client.
Sau khi chấp nhận yêu cầu kết nối, Server đợi Client gửi yêu cầu đến. Ở đây
Client và Server có thể trao đổi thông tin với nhau nhiều lần qua hai hàm đó
là Sendto() và hàm Recvfrom().
Giữa Client và Server không hề có một kênh ảo nào vì vậy việc truyền nhận
dữ liệu thường dễ bị mất mát.
2.1.7. Sử dụng C# Stream với TCP.
Điều khiển thông điệp dùng giao thức TCP thường gây ra khó khăn cho các lập
trình viên, do vậy .Net Framwork cung cấp một số lớp đề giảm gánh nặng lập trình.
Một trong những lớp đó là NetworkStream, và hai lớp dùng để gởi và nhận dữ liệu sử
dụng hai lớp đó là StreamWriter và StreamReader.
2.1.7.1. Lớp NetworkStream.
Lớp này được nằm trong thư viện System.Net.Socket. Lớp NetworkStream có
thể được tạo lập bằng nhiều phương thức khác nhau, nhưng một phương thức tạo lập
mà ta hay sử dụng đó là gán vào Socket của Server và Client đã được tạo lập sẵn.
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
NetworkStream ns = new NetworkStream(newsock);
Một số phương thức của lớp NetworkStream.
Thuộc tính Mô tả
CanRead() true nếu NetworkStream hỗ trợ đọc
CanSeek() Luôn luôn false
CanWrite() true nếu NetworkStream hỗ trợ ghi
DataAvailable() true nếu có dữ liệu để đọc
Phương thức Mô tả
BeginRead() Bắt đầu đọc NetworkStream bất đồng bộ
BeingWrite() Bắt đầu ghi NetworkStream bất đồng bộ
EndRead() Kết thúc đọc NetworkStream bất đồng bộ
Page | 19
EndWrite() Kết ghi đọc NetworkStream bất đồng bộ
Flush() Đẩy toàn bộ dữ liệu đi
Read() Đọc dữ liệu từ NetworkStream
ReadToEnd() Đọc dữ liệu cho đến hết Stream.
Page | 20
ToString() Tạo ra một chuỗi mô tả đối tượng Stream.
Equals() So sánh hai đối tượng StreamRead.
Close() Đóng đối tượng StreamRead
Bảng 2. 2. Một số phương thức lớp StreamRead
Một số phương thức của lớp StreamWriter.
Lớp StreamWriter cũng có nhiều phương thức kết hợp với nó, một số phương
thức của lớp StreamRead cũng có trong đối tượng StreamWriter, ngoài ra nó còn có
một số phương thức giêng dưới đây.
Phương thức Mô tả
Flush() Gửi tất cả dữ liệu trong bộ đệm
StreamWriter ra Stream.
Writer() Gửi một hoặc nhiều byte ra Stream.
WriterLine() Gửi dữ liệu cùng với ký tự xuống dòng ra
Stream
Bảng 2. 3. Một số phương thức lớp StreamWriter
2.1.8. Sử dụng các lớp Helper Socket.
Cũng nhằm giảm gánh nặng cho các lập trình viên .Net Framwork đã đưa ra lớp
Helper để hỗ trợ cả lập trình hướng kết nối với Socket (TCP) và lập trình không hướng
kết nối với Socket (UDP).
2.1.8.1.TCPClient.
TCPClient được thiết kế nhằm hỗ trợ cho việc viết các ứng dụng TCP Client
được dễ dàng.
Bảng các thành viên của lớp TCPClient.
Phương thức khởi tạo Mô tả
TcpClient() Tạo một đối tượng TcpClient. Chưa đặt thông số gì.
TcpClient(IPEndPoint) Tạo một TcpClient và gắn cho nó một EndPoint cục bộ.
(Gán địa chỉ máy cục bộ và số hiệu cổng để sử dụng trao
đổi thông tin về sau)
dữ liệu đi.
• Dùng đối tượng StreamReader.Readline/Read vừa tạo ở trên để đọc
dữ liệu về.
Bước 5: Đóng kết nối.
Nếu muốn gửi/nhận dữ liệu ở mức byte (nhị phân) thì dùng NetworkStream.
(truyền GetStream cho NetworkStream).
2.1.8.2. TCPListener.
TCPListerner là một lớp cho phép người lập trình có thể xây dựng các ứng
dụng Server (Ví dụ như SMTP Server, FTP Server, DNS Server, POP3 Server hay
server tự định nghĩa ….). Ứng dụng server khác với ứng dụng Client ở chỗ nó luôn
luôn thực hiện lắng nghe và chấp nhận các kết nối đến từ Client.
Bảng các thành viên của lớp TCPListener.
Phương thức khởi tạo Mô tả
Page | 22
TcpListener ( Int32) Tạo một TcpListener và lắng nghe tại cổng chỉ
định.
TcpListener (IPEndPoint) Tạo một TcpListener với giá trị Endpoint truyền
vào.
TcpListener(IPAddress,Int32) Tạo một TcpListener và lắng nghe các kết nối đến
tại địa chỉ IP và cổng chỉ định.
Phương thức Mô tả
AcceptSocket( ) Chấp nhận một yêu cầu kết nối đang chờ.
AcceptTcpClient() Chấp nhận một yêu cầu kết nối đang chờ. (Ứng
dụng sẽ dừng tại lệnh này cho đến khi nào có một
kết nối đến – “Blocking”).
Pending() Cho biết liệu có kết nối nào đang chờ đợi không
Start() Bắt đầu lắng nghe các yêu cầu kết nối.
Stop() Dừng việc nghe.
Bảng 2. 5. Các phương thành viên của lớp TCPListener.
2.1.8.3. UDPClient.
Receive (ref IPEndPoint) Nhận dữ liệu (đồng bộ) do máy ở xa gửi. (Đồng bộ
có nghĩa là các lệnh ngay sau lệnh Receive chỉ được
thực thi nếu Receive đã nhận được dữ liệu về . Còn
nếu nó chưa nhận được – dù chỉ một chút – thì nó
vẫn cứ chờ (blocking))
Send() Gửi dữ liệu (đồng bộ) cho máy ở xa.
Bảng 2. 6. các thành viên của lớp UDPClient.
2.1.9. Lập trình Socket bất đồng bộ.
Ở phần đầu của báo cáo chúng ta đã lập trình Socket trong chế độ blocking.
Socket blocking sẽ chờ mãi cho đến khi hoàn thành nhiệm vụ của nó. Trong khi nó bị
blocking thì các chức năng khác của chương trình không thực hiện được.
Khi lập trình Windows thì lúc gọi một phương thức bị blocking thì toàn bộ
chương trình sẽ đứng lại và không thể thực hiện các chức năng khác được. Do đó việc
lập trình bất đồng bộ là cần thiết để cho chương trình khỏi bị treo.
Lớp AsyncCallback cung cấp các phương thức để bắt đầu một chức năng bất
đồng bộ và cung cấp một phương thức delegate để gọi chức năng bất đồng bộ kết thúc.
Các phương thức bất đồng bộ trong Socket chia các chức năng mạng làm hai
phần.
Một phương thức Begin bắt đầu các chức năng mạng và đăng ký phương
thức AsyncCallback.
Một phương thức End hoàn thành chức năng mạng khi phương thức
AsyncCallback được gọi.
Phương thức bắt đầu Mô tả Phương thức kết thúc
BeginAccept() Chấp nhận kết nối EndAccept()
Page | 24
BeginConnect() Kết nối đến thiết bị ở xa EndConnect()
BeginReceive() Nhận dữ liệu từ Socket EndReceive()
BeginReceiveFrom() Nhận dữ liệu từ thiết bị ở xa EndReceiveFrom()
BeginSend() Gửi dữ liệu từ Socket EndSend ()
BeginSendTo() Gửi dữ liệu đến thiết bị ở xa EndSendTo()