Tải bản đầy đủ (.doc) (78 trang)

BÀI BÁO CÁO THỰC TẬP-XÂY DỰNG PHẦN MỀM LỚP HỌC ẢO TRONG MẠNG LAN

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 (1.13 MB, 78 trang )

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

































Hà Nội, ngày tháng năm 2012
Giảng viên
Th.S Nguyễn Tiến Lợi
Page | 3
LỜI NÓI ĐẦU
Công nghệ thông tin là ngành công nghiệp mũi nhọn của thế giới nói chung và
của Việt Nam nói riêng, nó đã phát triển mạnh mẽ không ngừng trong những năm gần
đây. Số lượng các trường học có đào tạo nghành CNTT ngày một tăng cao, cùng với
đó là các trung tâm tin học mở ra ngày một nhiều. Và lẽ tự nhiên khi các trường, các
trung tâm muốn có các phòng máy chất lượng thì họ cũng sẽ có nhu cầu sử dụng các
hệ thống quản lý phòng máy đa năng, tiện dụng và thân thiện người sử dụng. Tại các
phòng máy đó các giảng viên có thể dễ dàng truyền đạt kiến thức một cách sinh động,
trực quan cho các học viên bằng cách sử dụng chức năng chia sẻ màn hình của phần
mềm quản lý phòng máy, hoặc giảng viên có thể chỉ dẫn cho học viên trực tiếp trê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.

Báo cáo về quá trình để xây dựng các module chính của phần mềm, và sau đó
tiến hành xây dựng một phần mềm hoàn thiện.
Đưa ra một phần mềm hoàn thiện và đánh giá về các kết quả thực nghiệm.
2. Cấu trúc của báo cáo.
 Chương 1. Tổng quan về đề tài.
 Chương 2. Lý thuyết cơ sở.
 Chương 3. Ứng dụng phần mềm quản lý lớp học ảo.
 Chương 4. Cài đặt và thử nghiệm.
 Chương 5. Kết luận.
 Tài liệu tham khảo và kiến nghị.
Page | 5
DANH SÁCH HÌNH ẢNH
DANH MỤC BẢNG BIỂU
Page | 6
DANH MỤC CÁC THUẬT NGỮ VIẾT TẮT
Danh sách từ viết tắt Nghĩa của từ
LanVC Lan Virual Class (Phần mềm lớp học ảo).
IP Internet Protocol.
TCP Transmission Control Protocol.
UDP User Datagram Protocol.
TCP/IP Internet Protocol Suite.
FPT File Transfer Protocol.
SMTP Simple Mail Transfer Protocol.
HTTP HyperText Transfer Protocol.
DNS Doname System.
RGB Không gian màu gồm ba màu Red - Blue - Green.
API Application programming interface.
DLL Dynamic Link Library.
XML Extensible Markup Language.
HTML HyperText Markup Language.

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ế.

Hiện nay trên thị trường cũng đã có các sản phẩm phần mềm có tính năng
tương tự hoặc một số phần mềm có tính năng như một module nhỏ của phần mềm lớp
học ảo.
 Farstone Virtual Class.
• Ưu điểm : Là một phần mềm của hãng FarStone đưa ra với mục
đích quản lý lớp học ảo gần như rất hoàn hảo, nó có thể cho phép
giảng viên và học sinh tương tác với nhau vô cùng đơn giản và
tiện lợi.
• Nhược điểm : giá cả của nó thì không hề dẻ chút nào với 299$.
Và nó còn thiếu một tính năng đó là chức năng quay phim màn
hình và Void chat trong lớp học.
 Remote Desktop Connection.
Page | 9
• Ưu điểm : là một phần mềm của hãng Micosoft được chạy trên
Windows 7 và Windows Vista và nó là một phần mềm miễn phí,
và sử dụng được một cách linh hoạt.
• Nhược điểm : còn có nhiều thiếu sót đó là chỉ có chức năng
remote desktop từ xa mà không hề có chức năng như giảng dạy,
Do đó phần mềm này chỉ giúp ích được không nhiều trong việc
quản lý lớp học ảo. Và thêm nữa là chúng ta cần phải nhớ tên của
máy Client và Password đây là việc cực kỳ bất tiện.
 FreeVC.
• Ưu điểm : là một phần mềm của người việt được viết bởi tác giả
Bùi Duy Hùng, phần mềm này đã nhận được giải thưởng phần
mềm sáng tạo của trường Đại học Công Nghiệp Hà Nội. Phần
mềm này được đánh giá là tiện ích như phần mềm Farstone
Virtual Class nhưng nó là một phần mềm miễn phí và hiệu năng
và tính năng đơn giản dễ sử dụng
• Nhược điểm : tuy vậy phần mềm này còn nhiều thiếu sót như
quản lý Usb, Turn Off Computer, và một vài chức năng khác.

 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.

Server Client
Hardware
Ram 2.0 GB
CPU Core 2 Duo 2.8 GHz
LAN network
Ram 512 MB
CPU P IV 2.4 GHz
LAN network
Software
Window Server 2003.
SQL Server 2005
.Net framework 3.5
Windows XP.
.Net framework 3.5
Bảng 1. 2. Cấu hình được khuyến cáo trong phòng máy.
1.3.2. Đề xuất các module.
Như trong phần 1.1 và 1.2 chúng ta đã được biết mức độ cấp bách và cần thiết
phải thực hiện “Xây dựng phần mềm lớp học ảo trong mạng Lan”. Do đó phần mềm
của chúng em được đề xuất các module chính sau đây cần thiết phải thực hiện.
Module chia sẻ (gồm chia sẻ tài liệu, chia sẻ màn hình, thực hiện việc trao đổi
thông tin bằng chat message).
Module tiện ích (gồm có Turn off computer, Disable/Enable Usb disk, Remote
desktop, và chức năng VoIP).
Trong đó có hai module chính quan trọng và cần thiết nhất cần giải quyết đó và
Remote desktop và chia sẻ màn hình. Hai module này về giải thuật và cách xây dựng
là tương đối giống nhau.
1.4. Mục tiêu của đề tài.
 Đưa ra những giải pháp cụ thể của phần mềm để giải quyết các bất cập đã
nêu.
 Đề xuất xây dựng một phần mềm với mục đích giúp việc học tập và giảng

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á

trình lập trình mạng.
 Xây dựng một báo cáo cụ thể và chi tiết về các kỹ thuật lập trình Thread,
API và xử lý ảnh được ứng dụng trong bài toán.
 Cài đặt và xây dựng một phần mềm lớp học ảo thực tế. Và sau đó đánh giá
các kết quả thực nghiệm.
Kết luận chương.
Nội dung chương này chúng em sẽ trình bầy lý do để chọn ra đề tài, các nội
dung và các mục cần thiết để nghiên cứu, đưa ra các module cần thiết phải xây dựng
trong chương trình. Và đưa ra dự kiến thực hiện đề tài gồm : báo cáo và chương trình
demo các kết quả đã đạt được.
Page | 12
CHƯƠNG 2. LÝ THUYẾT CƠ SỞ
2.1. Lập trình Socket C#.
2.1.1. Socket là gì?.
Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương
trình yêu cầu dịch vụ ( client) và một chương trình cung cấp dịch vụ (server) trên
mạng LAN, WAN hay Internet và đôi lúc là giữa những tiến trình ngay trong một máy
tính. Mỗi socket có thể được xem như một điểm cuối (EndPoint) trong một kết nối.
Một socket trên máy yêu cầu dịch vụ có địa chỉ mạng được cấp sẵn để “gọi”
một socket trên máy cung cấp dịch vụ. Một khi socket đã được thiết lập phù hợp, hai
máy tính có thể trao đổi dịch vụ và dữ liệu.
Socket được giới thiệu lần đầu tiên trong ấn bản UNIX - BSD 4.2 dưới dạng
các hàm hệ thống theo cú pháp ngôn ngữ C (socket(), bind(), connect(), send(),
receive(), read(), write(), close() , ). Ngày nay, Socket được hỗ trợ trong hầu hết các
hệ điều hành như MS Windows (WinSock), Linux và được sử dụng trong nhiều ngôn
ngữ lập trình khác nhau: như C, C++, C#, Java, Visual Basic, Visual C++ . . .
Dữ liệu gởi và nhận bằng Socket bắt buộc phải là mảng các byte.
2.1.2. Chức năng của Socket
Socket cho phép thiết lập các kênh giao tiếp mà hai đầu kênh được xác định bởi
hai cổng (port). Thông qua các cổng này một tiến trình có thể nhận và gởi dữ liệu với

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

là cổng hệ thống được dành riêng cho các tiến trình của hệ thống.
Page | 14
2.1.5. Các chế độ giao tiếp
Xét kiến trúc của hệ thống mạng TCP/IP:
Hình 2. 3: Các chế độ giao tiếp các tầng mạng khác nhau.
Tầng vận chuyển (Transport Layer) giúp chuyển tiếp các thông điệp giữa các
chương trình với nhau. Nó có thể hoạt động theo hai chế độ:
 Giao tiếp có nối kết, nếu giữa chúng sử dụng giao thức TCP.
 Giao tiếp không kết nổi, nếu sử dụng giao thức UDP.
Socket là giao diện giữa chương trình và lớp vận chuyển. Nó cho phép ta chọn
giao thức sử dụng ở tầng vận chuyển là TCP hay UDP cho chương trình ứng dụng của
mình.
Bảng so sánh sự khác biện giữa hai chế độ giao tiếp có kết nối và không kết
nối.
Chế độ có nối kết Chế độ không nối kết
- Tồn tại kênh giao tiếp ảo giữa hai bên
giao tiếp.
- Dữ liệu được gởi đi theo bảo đảm: có
kiểm tra lỗi, truyền lại gói tin lỗi hay mất,
đảm báo thứ tự của các gói tin.
- Dữ liệu chính xác nhưng tốc độ truyền
chậm.
- Không tồn tại kênh giao tiếp ảo giữa hai
bên.
- Dữ liệu được gởi đi không đảm bảo:
Không kiểm tra lỗi, không phát hiện và
truyền lại gói tin bị lỗi hay mất, không
đảm bảo thứ tự đến của các gói tin.
- Dữ liệu không chính xác, tốc độ truyền
nhanh.

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 sẽ sử dụng hàm Send() gửi lần lượt các byte dữ liệu.
 Server phân tích và thực thi yêu cầu. Kết quả và nó gửi lại dữ liệu cho
Client bằng lệnh Send().
 Trong giai đoạn này, việc trao đổi thông tin giữa Server và Client phải tuân
thủ theo giao thức ứng dụng. Thông thường thì Client sẽ là bên gửi yêu cầu
đến Server trước.
Giai đoạn 4: Kết thúc phiên làm việc.
Hình 2. 7. Mô tả kết thúc phiên làm việc giữa Client và Server.
 Việc trao đổi dữ liệu giữa Server và Client được thực hiện nhiều lần.
 Kênh ảo sẽ bị xóa khi Server hoặc Client đóng Socket bằng lệnh Close().
2.1.6.2. Mô hình Client-Server sử dụng Socket ở chế độ không kết nối (UDP)
Page | 17
UDP là giao thức theo phương thức không liên kết được sử dụng thay thế cho
TCP . Nó khác với TCP, không có chức năng thiết lập liên kết và kết thúc liên kết. Do
vậy việc trao đổi thông tin dữ liệu là không đáng tin cậy.
Các giai đoạn thực hiện của Socket không hướng kết nối.
Giai đoạn 1: Server tạo ra Socket và gán số hiệu cổng.
Hình 2. 8. Mô tả quá trình khởi tạo UDP Socket Server.
 Socket(): Server yêu cầu tạo ra một Socket để sử dụng các dịch vụ của tầng
vận chuyển.
 Bind(): Sau khi đã khởi tạo Socket thì cần phải gắn một port cục bộ cho nó.
Giai đoạn 2: Client tạo Socket.
Hình 2. 9. Mô tả quá trình khởi tạo UDP Socket Client.
 Bên phía Client sẽ yêu cầu tạo ra một Socket để sử dụng dịch vụ của tầng
vận chuyển.
 Sau đó Client có thể Send dữ liệu tới một địa chỉ ip và port cục bộ của
Server.
Giai đoạn 3: Trao đổi thông tin giữa Client và Server
Page | 18
Hình 2. 10. Mô tả quá trình truyền nhận dữ liệu bằng UDP.

 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

Write() Ghi dữ liệu từ NetworkStream
Equals() So sánh hai đối tượng NetworkStream
GetHashCode() Lấy hash code cho NetworkStream.
Close() Đóng đối tượng NetworkStream
Bảng 2. 1. Một số phương thức của lớp NetworkStream
Chú ý : Phương thức Flush() được dùng sau mỗi phương thức Write() để đảm
bảo dữ liệu được đặt vào NetworkStream sẽ lập tức gửi đến hệ thống ở xa.
NetworkStream khi truyền dữ liệu cũng có gặp một số vấn đề về biên dữ liệu.
Vấn đề này đã được giải quyết với hai lớp StreamReader và lớp StreamWriter.
2.1.7.2. Lớp StreamReader và StreamWriter.
Hai lớp này nằm trong thư viện System.IO để điều khiển đọc và ghi các thông
điệp text từ mạng. Cả hai lớp đều triển khai với đối tượng NetworkStream để xác định
các hệ thống đánh dấu cho thông điệp TCP.
Các phương thức tạo lập lớp StreamRead và StreamWriter, trong đó một
phương thức tạo lập mà ta hay được sử dụng nhất đó là gắn hai lớp trên vào lớp
NetworkStream đã được tạo lập từ trước.
Socket newsock = new Socket(AddressFamily. InterNetwork, SocketType. Stream,
ProtocolType. Tcp);
NetworkStream ns = new NetworkStream(newsock);
StreamReader nr = new StreamReader(ns);
StreamWriter nw = new StreamWriter(ns);
Một số phương thức của lớp StreamRead.
Phương thức Mô tả
Read() Đọc một hoặc nhiều byte dữ liệu từ
StreamReader.
Peek() Trả về byte dữ liệu hợp lệ tiếp theo mà
Không gỡ bỏ nó khỏi Stream.
ReadLine() Đọc dữ liệu bắt đầu từ đối tượng
StreamRead trở lên cho tới khi bắt gặp ký tự
xuống dòng đầu tiên.

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)

TcpClient(String,Int32) Tạo một đối tượng TcpClient và kết nối đến một máy có
địa chỉ và số hiệu cổng được truyền vào. RemoteHost có
thể là địa chỉ IP chuẩn hoặc tên máy.
Các thuộc tính Mô tả
Available Cho biết số byte đã nhận về từ mạng và có sẵn để đọc.
Client Trả về Socket ứng với TCPClient hiện hành.
Page | 21
Connected Trạng thái cho biết đã kết nối được đến Server hay chưa?
Các hàm thành phần Mô tả
Close() Giải phóng đối tượng TcpClient nhưng không đóng kết
nối.
Connect(RemoteHost,
RemotePort)
Kết nối đến một máy TCP khác có Tên và số hiệu cổng.
GetStream() Trả về NetworkStream để từ đó giúp ta gửi hay nhận dữ
liệu. (Thường làm tham số khi tạo StreamReader và
StreamWriter để gửi và nhận dữ liệu dưới dạng xâu ký tự)
.
Khi đã gắn vào StreamReader và StreamWriter rồi thì ta
có thể gửi và nhận dữ liệu thông qua các phương thức
Readline, writeline tương ứng của các lớp này.
Bảng 2. 4. Các thành viên của lớp TCPClient.
Từ các thành viên của lớp TcpClient ở trên ta thấy rằng, việc kết nối và thực
hiện gửi nhận rất đơn giản. Theo các trình tự sau:
 Bước 1: Tạo một đối tượng TcpClient.
 Bước 2: Kết nối đến máy chủ (Server) dùng phương thức Connect.
 Bước 3: Tạo 2 đối tượng StreamReader (Receive)và StreamWriter
(Send) và "nối" với GetStream của TCPClient.
 Bước 4:
• Dùng đối tượng StreamWriter.Writeline/Write vừa tạo ở trên để gửi

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.

Giao thức UDP (User Datagram Protocol hay User Define Protocol) là một giao
thức phi kết nối (connectionless) có nghĩa là một bên có thể gửi dữ liệu cho bên kia mà
không cần biết là bên đó đã sẵn sàng hay chưa? (Nói cách khác là không cần thiết lập
kết nối giữa hai bên khi tiến hành trao đổi thông tin). Giao thức này không tin cậy
bằng giao thức TCP nhưng tốc độ lại nhanh và dễ cài đặt. Ngoài ra, với giao thức UDP
ta còn có thể gửi các gói tin quảng bá (Broadcast) cho đồng thời nhiều máy.
Trong .NET, lớp UDPClient (nằm trong namesapce System.Net.Sockets) đóng
gói các chức năng của giao thức UDP.
Bảng các thành viên của lớp UDPClient
Phương thức khởi tạo Mô tả
UdpClient () Tạo một đối tượng (thể hiện) mới của lớp
UDPClient.
UdpClient (AddressFamily) Tạo một đối tượng (thể hiện) mới của lớp
UDPClient. Thuộc một dòng địa chỉ
(AddressFamily) được chỉ định.
UdpClient (Int32) Tạo một UdpClient và gắn (bind) một cổng cho nó.
UdpClient (IPEndPoint) Tạo một UdpClient và gắn (bind) một IPEndpoint
(gán địa chỉ IP và cổng) cho nó.
UdpClient(Int32, Tạo một UdpClient và gán số hiệu cổng,
Page | 23
AddressFamily) AddressFamily
UdpClient(String, Int32) Tạo một UdpClient và thiết lập với một trạm từ xa
mặc định.
Phương thức Mô tả
BeginReceive() Nhận dữ liệu Không đồng bộ từ máy ở xa.
BeginSend() Gửi không đồng bộ dữ liệu tới máy ở xa
Close() Đóng kết nối.
Connect() Thiết lập một Default remote host.
EndReceive() Kết thúc nhận dữ liệu không đồng bộ ở trên
EndSend() Kết thúc việc gửi dữ liệu không đồng bộ ở trên

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()

Bảng 2. 7. Các phương thức của lập trình Socket bất đồng bộ.
2.1.9.1. Thành lập kết nối.
Phương thức dùng để thành lập kết nối với thiết bị ở xa phụ thuộc vào chương
trình đóng vai trò là Server hay Client. Nếu là Server thì phương thức BeginAccept()
được dùng, còn bên Client thì phương thức BeginConnect() được sử dụng.
Phương thức BeginAccept() và EndAccept().
Server.BeginAccept(new AsyncCallback(CallAccept), Server);
Socket s = (Socket)ia.AsyncState;
Server = s.EndAccept(ia);
Sau khi phương thức BeginAccept() kết thúc, phương thức AsyncCallback định
nghĩa sẽ được gọi khi kết nối xảy ra. Phương thức AsyncCallback phải bao gồm
phương thức EndAccept() để kết thúc việc chấp nhận Socket. Sau đây là định dạng của
phương thức EndAccept().
Phương thức Beginconnect() và EndConnect()
_clientsocket.BeginConnect(_ipep,
new AsyncCallback(CallPConnect), _clientsocket);
_clientsocket.EndConnect(ia);
2.1.9.2. Trao đổi dữ liệu.
Sau khi Server và Client đã thiết lập kết nối, ta có thể thực hiện việc trao đổi dữ
liệu giữa Server và Client.
Phương thức BeginSend() và EndSend().
_ServerSocket.BeginSend(data, 0, data.Length, SocketFlags.None, new
AsyncCallback(SendcmdMessage), _ServerSocket);
Socket s = (Socket) ia.AsyncState;
s.EndSend(ia);
Các phương thức khác thực hiện giống như phương thức BeginSend() và
EndSend().
2.2. Lập trình .Net Remoting.
2.2.1. Các khái niệm.
Page | 25

×