Trong cuộc sống hiện đại, sự bùng nổ công nghệ thông tin và truyền thông, những thành tựu của nó đã có những ứng dụng lớn, trở thành một quan trọng trong cuộc sống của chúng ta. Từ yêu cầu mở rộng và phát triển công nghệ thông tin và giáo dục công nghệ thông tin trong nhà trường và xã hội, các điểm máy tính công cộng ra đời với số lượng máy tính trong mạng không ngừng tăng lên (các điểm truy nhập internet công cộng, các phòng thực hành tin học ở các nhà trường, các hệ thống mạng nội bộ của các công ty, công sở, v.v.). Theo xu hướng đó, các phần mềm quản lý hệ thống mạng máy tính cục bộ trong các điểm máy tính công cộng ra đời, như NetOp School, NetCafe, CSM, v.v.. Chúng tích hợp rất nhiều chức năng trong việc quản lý một hệ thống mạng nội bộ với nhiều máy tính, nhưng chúng vẫn còn thiếu sót một số chức năng về chống dữ liệu xâm nhập hoặc các chức năng này tương đối khó sử dụng, không thuận tiện khi thao tác. Chính vì vậy, việc nghiên cứu và xây dựng ứng dụng cụ thể để bảo vệ hệ thống máy tính cá nhân trong mạng máy tính công cộng là một vấn đề cần được quan tâm và phát triển, từ đó ứng dụng thực tế vào việc bảo vệ hệ thống máy tính tại phòng thực hành tin học, trường Đại học Hùng Vương.
Trang 1MỤC LỤC
MỤC LỤC 1
DANH MỤC HÌNH ẢNH 5
DANH MỤC CÁC TỪ VIẾT TẮT 6
LỜI CẢM ƠN 7
A MỞ ĐẦU 8
1 Đặt vấn đề nghiên cứu 8
1.1 Sự cần thiết phải nghiên cứu 8
1.2 Căn cứ khoa học và thực tiễn 8
2 Mục tiêu nghiên cứu của đề tài 9
2.1 Mục tiêu chung 9
2.2 Mục tiêu cụ thể 10
3 Đối tượng và phạm vi nghiên cứu 10
3.1 Đối tượng nghiên cứu 10
3.2 Phạm vi nghiên cứu 10
4 Phương pháp nghiên cứu 10
B NỘI DUNG NGHIÊN CỨU: 12
CHƯƠNG I: TÌM HIỂU VỀ LẬP TRÌNH MẠNG 12
1.1 Tổng quan về lập trình mạng 12
1.1.1 Họ giao thức TCP/IP 12
1.1.2 So sánh 2 giao thức TCP và UDP 13
1.1.3 Địa chỉ IP 14
1.2 Lập trình mạng trong NET Framework 15
1.2.1 Cơ sở lý thuyết về NET 15
1.2.1.1 Nền tảng của NET 15
1.2.1.2 Ngôn ngữ C# 16
1.2.2 Sử dụng các lớp hỗ trợ được xây dựng từ lớp Socket 17
Trang 21.2.2.1 Lớp TCPClient 17
1.2.2.2 Lớp TCPListener 18
1.2.2.3 Lớp UDPClient 19
1.2.3 Socket không đồng bộ 20
1.2.3.1 Mô hình xử lý sự kiện của Windows 20
1.2.3.2 Sử dụng Socket không đồng bộ 21
1.2.4 Sử dụng Thread trong các ứng dụng mạng 25
1.2.4.1 Một số khái niệm 25
1.2.4.2 Sử dụng Thread trong chương trình Net 25
1.2.4.3 Sử dụng Threadpool trong các chương trình Net 27
CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 28
2.1 Yêu cầu hệ thống 28
2.2 Các vấn đề cần giải quyết 28
2.3 Đặc tả chức năng của hệ thống 28
2.3.1 Chức năng chat với máy trạm 29
2.3.2 Chức năng gửi tệp tin đến máy trạm 29
2.3.3 Chức năng tắt máy trạm 29
2.3.4 Chức năng theo dõi màn hình máy trạm 29
2.3.5 Chức năng điều khiển máy trạm 29
2.3.6 Chức năng cấm ứng dụng 30
2.4 Phân tích thiết kế hệ thống 30
2.4.1 Xây dựng biểu đồ phân cấp chức năng 30
2.4.2 Xây dựng biểu đồ luồng dữ liệu 32
2.4.2.1 Xây dựng biểu đồ luồng dữ liệu mức khung cảnh 32
2.4.2.2 Xây dựng biểu đồ luồng dữ liệu mức đỉnh 32
2.4.2.3 Xây dựng biểu đồ luồng dữ liệu mức dưới đỉnh 32
CHƯƠNG 3: XÂY DỰNG PHẦN MỀM 34
Trang 33.1 Giới thiệu về phần mềm 34
3.2 Các tính năng của chương trình 34
3.2.1 Giao diện chính của chương trình 34
3.2.1.1 Lưu địa chỉ IP máy trạm của phiên làm việc trước 35
3.2.1.2 Phương thức truyền địa chỉ IP cho Form con 35
3.2.2 Chức năng tắt máy 35
3.2.3 Chat với máy trạm 36
3.2.4 Gửi tệp tin đến máy trạm 37
3.2.5 Xem/điều khiển máy trạm 37
3.2.6 Chức năng cấm ứng dụng 38
3.2.7 Chức năng phát hiện USB cắm vào máy trạm 39
3.3 Kiểm thử và bảo trì 39
C KẾT LUẬN CHUNG 42
1 Kết quả đạt được 42
1.1 Ưu điểm 42
1.2 Nhược điểm 42
1.3 Hướng phát triển 42
2 Tổng kết 43
D PHỤ LỤC 44
E TÀI LIỆU THAM KHẢO 50
Trang 4DANH MỤC HÌNH ẢNH
Hình 1.1 Mô hình tham chiếu và giao thức TCP/IP 13
Hình 1.2 Mô hình xử lý sự kiện trong Windows 21
Hình 2.1 Biểu đồ phân cấp chức năng 31
Hình 2.2 Biểu đồ luồng dữ liệu mức khung cảnh 32
Hình 2.3 Biểu đồ luồng dữ liệu mức đỉnh 32
Hình 2.4 Biểu đồ luồng dữ liệu mức đỉnh chức năng giám sát 33
Hình 2.5 Biểu đồ luồng dữ liệu mức đỉnh chức năng điều khiển 33
Hình 3.1 Giao diện cài đặt IP máy chủ trên máy Client 34
Hình 3.2 Giao diện chính của chương trình 35
Hình 3.3 Giao diện tính năng Chat với Client 36
Hình 3.4 Giao diện tính năng gửi tệp tin 37
Hình 3.5 Giao diện của chức năng xem/điều khiển máy trạm 38
Hình 3.6 Giao diện chức năng cấm ứng dụng 39
Trang 5DANH MỤC CÁC TỪ VIẾT TẮT
TCP/IP Transmission Control Protocol/Internet Protocol
UDP User Datagram Protocol
IP Internet Protocol
OSI Open Systems Interconnection Reference Model
RIP Routing Information Protocol
OSPF Open Shortest Path First
BGP Border Gateway Protocol
FTP File Transfer Protocol
SMTP Simple Mail Transfer Protocol
DNS Domain Name System
LAN Local Area Network
WAN Wide Area Network
NTP Network Time Protocol
DNS Domain Name System
DHCP Dynamic Host Configuration Protocol
SNMP Simple Network Management Protocol
IANA Internet Assigned Numbers Authority
FCL Framework Class Library
IDE Intergrated Development Enviroment
XML eXtensible Markup Language
CLR Common Language Runtime
DLL Dynamic Link Library
RAM Random Access Memory
CPU Central Processing Unit
Trang 6Trong quá trình thực tập và làm báo cáo, vì chưa có kinh nghiệm thực tế, chỉdựa vào lý thuyết đã học cùng với thời gian hạn hẹp nên bài báo cáo chắc chắn sẽkhông tránh khỏi những sai sót Kính mong nhận được sự góp ý, nhận xét từ phíaquý thầy, cô để kiến thức của em ngày càng hoàn thiện hơn và rút ra được nhữngkinh nghiệm bổ ích có thể áp dụng vào thực tiễn một cách hiệu quả trong tương lai.Kính chúc mọi người luôn vui vẻ, hạnh phúc, dồi dào sức khỏe và thành côngtrong công việc.
Em xin chân thành cảm ơn!
Sinh viên thực hiện:
Lê Minh Thành
Trang 7A MỞ ĐẦU
1 Đặt vấn đề nghiên cứu
1.1 Sự cần thiết phải nghiên cứu
Trong cuộc sống hiện đại, sự bùng nổ công nghệ thông tin và truyền thông,những thành tựu của nó đã có những ứng dụng lớn, trở thành một quan trọng trongcuộc sống của chúng ta
Từ yêu cầu mở rộng và phát triển công nghệ thông tin và giáo dục công nghệthông tin trong nhà trường và xã hội, các điểm máy tính công cộng ra đời với sốlượng máy tính trong mạng không ngừng tăng lên (các điểm truy nhập internetcông cộng, các phòng thực hành tin học ở các nhà trường, các hệ thống mạng nội
bộ của các công ty, công sở, v.v.) Theo xu hướng đó, các phần mềm quản lý hệthống mạng máy tính cục bộ trong các điểm máy tính công cộng ra đời, như NetOpSchool, NetCafe, CSM, v.v Chúng tích hợp rất nhiều chức năng trong việc quản lýmột hệ thống mạng nội bộ với nhiều máy tính, nhưng chúng vẫn còn thiếu sót một
số chức năng về chống dữ liệu xâm nhập hoặc các chức năng này tương đối khó sửdụng, không thuận tiện khi thao tác
Chính vì vậy, việc nghiên cứu và xây dựng ứng dụng cụ thể để bảo vệ hệthống máy tính cá nhân trong mạng máy tính công cộng là một vấn đề cần đượcquan tâm và phát triển, từ đó ứng dụng thực tế vào việc bảo vệ hệ thống máy tínhtại phòng thực hành tin học, trường Đại học Hùng Vương
1.2 Căn cứ khoa học và thực tiễn
Thực tế cho thấy, tại phòng thực hành tin học của trường Đại học HùngVương, trong hệ thống mạng cục bộ phục vụ dạy học, tình trạng các sinh viên cóthể dễ dàng sao chép dữ liệu bên ngoài vào máy tính một cách trái phép, sử dụngcác ứng dụng một cách tùy tiện, hiện tượng sinh viên chơi game, duyệt web haylàm những việc không đúng với nội dung của giờ học vẫn tiếp tục diễn ra, gây giảmchất lượng giờ học và sự tập trung của sinh viên trong các giờ học thực hành Đặc
Trang 8biệt, việc đưa vào hệ thống dữ liệu bất hợp pháp gây ra nhiều nguy cơ rủi ro tiềm
ẩn về an toàn hệ thống máy tính như việc nhiễm các mã độc, virus máy tính,malware, v.v ngay cả khi hệ thống được đóng băng, khiến cho việc bảo trì hệthống của người quản trị trở nên khó khăn và tốn chi phí, thời gian, nguy cơ hỏnghóc tăng cao, nhất là khi người quản trị và bảo trì hệ thống không trực tiếp có mặttại các giờ học của sinh viên Bên cạnh đó, mặc dù đã có một số biện pháp phòng
vệ được đưa ra để khắc phục tình trạng này nhưng chúng tỏ ra không hiệu quả vớicác sinh viên chuyên ngành công nghệ thông tin Các phần mềm bảo vệ này dễdàng bị sao chép, dịch ngược hay dò được mật khẩu quản trị, từ đó các sinh viên cóthể ngưng được phần mềm bảo vệ này và thực hiện việc đưa dữ liệu trái phép vào
hệ thống một cách dễ dàng Việc kiểm tra và đánh giá trên phòng thực hành cũng
có nhiều đặc thù vì không thể kiểm soát được việc dừng nhập dữ liệu (tiếp tục làmbài) khi hết giờ kiểm tra Trong thi cử, việc kiểm tra trắc nghiệm, phát đề thi vẫnthực hiện một cách thủ công, không có sự trợ giúp của máy móc
2 Mục tiêu nghiên cứu của đề tài
2.1 Mục tiêu chung
- Nghiên cứu, tìm hiểu và hoàn thiện kiến thức ngành học về kỹ thuật lập trìnhC# trên Windows
- Quản lý các máy trạm trong hệ thống mạng máy tính
- Giám sát máy trạm, tự động cảnh báo đến máy chủ khi sinh viên thực hiệnnhững hành vi trái phép như chơi game, vào web, v.v
- Thực hiện các chức năng giảng dạy như trình diễn bài giảng, kiểm tra trắcnghiệm, v.v
- Điều khiển hay khóa một số chức năng của hệ thống máy trạm như khóaUSB, khóa mạng, chặn ứng dụng, v.v
- Tạo ra một tài liệu có hệ thống, đầy đủ và hữu ích trong việc tham khảo
- Tạo ra sản phẩm đáp ứng được những yêu cầu về an toàn và bảo mật
Trang 92.2 Mục tiêu cụ thể
Đề tài được chia làm hai phần chính là phần báo cáo và phần sản phẩm Ngoàiphần mở đầu, phần phụ lục và phần kết luận, báo cáo đề tài dày khoảng 50 trang, làtập hợp những kiến thức về lập trình mạng bằng ngôn ngữ Visual C# Những thôngtin này được cung cấp một cách đầy đủ, chi tiết, cách trình bày ngắn gọn, dễ hiểu.Phần sản phẩm là một phần mềm được lập trình hoàn chỉnh, mang tính ứngdụng cao nhằm quản lý và hỗ trợ giảng dạy cho giáo viên trong mạng máy tính tạiphòng máy thực hành nói chung và phòng thực hành tin học, trường đại học HùngVương nói riêng
3 Đối tượng và phạm vi nghiên cứu
3.1 Đối tượng nghiên cứu
- Máy tính, hệ thống máy tính trong mạng cục bộ (LAN) và các kiến thức liênquan về lập trình mạng
- Công cụ lập trình Visual Studio 2008 (ngôn ngữ lập trình C#) trong lập trìnhứng dụng mạng
- Đề tài được thực hiện trong 3 tháng tính từ ngày 22/12/2013
4 Phương pháp nghiên cứu
Trang 10- Phương pháp nghiên cứu lý luận: Nghiên cứ tìm hiểu các tài liệu nghiên
cứu, giáo trình, báo viết và các nguồn thông tin có chọn lọc trên Internet có liênquan tới lập trình mạng, cơ sở là ngôn ngữ lập trình C#
- Phương pháp tổng kết kinh nghiệm: Từ việc nghiên cứu tài liệu, giáo trình
và tìm hiểu các nguồn thông tin, rút ra được các thuật toán và các điều khiển cơ bảncủa ngôn ngữ lập trình trong việc lập trình mạng, tiến hành thử nghiệm phân tích,xây dựng phần mềm và sửa lỗi phát sinh theo module
- Phương pháp lấy ý kiến chuyên gia: Lấy ý kiến giảng viên trực tiếp hướng
dẫn và các chuyên gia khác để có thể hoàn thiện về mặt nội dung cũng như hình thứccủa đề tài, nhằm đảm bảo tính đúng đắn, bảo mật và hoạt động chính xác của phầnmềm, cũng như khả năng ứng dụng của phần mềm được xây dựng trong đề tài
Trang 11B NỘI DUNG NGHIÊN CỨU:
Giao thức trao đổi dữ liệu "có liên kết" (connection - oriented) TCP được sửdụng ở tầng vận chuyển để đảm bảo tính chính xác và tin cậy việc trao đổi dữ liệudựa trên kiến trúc kết nối "không liên kết" ở tầng liên mạng IP
Các giao thức hỗ trợ ứng dụng phổ biến như truy nhập từ xa (telnet), chuyểntệp (FTP), dịch vụ World Wide Web (WWW), thư điện tử (SMTP), dịch vụ tênmiền (DNS) ngày càng được cài đặt phổ biến như những bộ phận cấu thành của các
hệ điều hành thông dụng như UNIX (và các hệ điều hành chuyên dụng cùng họ củacác nhà cung cấp thiết bị tính toán như AIX của IBM, SINIX của Siemens, DigitalUNIX của DEC), Windows9x/NT, NovellNetware, v.v
Trang 12Hình 1.1 Mô hình tham chiếu và giao thức TCP/IP
1.1.2 So sánh 2 giao thức TCP và UDP
UDP (User Datagram Protocol) là một trong những giao thức cốt lõi của giaothức TCP/IP Dùng UDP, chương trình trên mạng máy tính có thể gửi những dữliệu ngắn được gọi là datagram tới máy khác UDP không cung cấp sự tin cậy vàthứ tự truyền nhận mà TCP làm Các gói dữ liệu có thể đến không đúng thứ tự hoặc
bị mất mà không có thông báo Tuy nhiên UDP nhanh và hiệu quả hơn đối với cácmục tiêu như kích thước nhỏ và yêu cầu khắt khe về thời gian Do bản chất khôngtrạng thái của nó nên nó hữu dụng đối với việc trả lời các truy vấn nhỏ với số lượnglớn người yêu cầu
TCP (Transmission Control Protocol - "Giao thức điều khiển truyền vận") làmột trong các giao thức cốt lõi của bộ giao thức TCP/IP Sử dụng TCP, các ứngdụng trên các máy chủ được nối mạng có thể tạo các "kết nối" với nhau, mà qua đóchúng có thể trao đổi dữ liệu hoặc các gói tin Giao thức này đảm bảo chuyển giao
dữ liệu tới nơi nhận một cách đáng tin cậy và đúng thứ tự TCP còn phân biệt giữa
dữ liệu của nhiều ứng dụng (chẳng hạn, dịch vụ Web và dịch vụ thư điện tử) đồngthời chạy trên cùng một máy chủ
Khác nhau (cơ bản):
Trang 13Các header của TCP và UDP khác nhau ở kích thước (20 và 8 byte) nguyên nhânchủ yếu là do TCP phải hộ trợ nhiều chức năng hữu ích hơn(như khả năng khôi phụclỗi) UDP dùng ít byte hơn cho phần header và yêu cầu xử lý từ host ít hơn.
TCP:
- Dùng cho mạng WAN
- Không cho phép mất gói tin
- Đảm bảo việc truyền dữ liệu
- Tốc độ truyền thấp hơn UDP
Địa chỉ IP (IP là viết tắt của từ tiếng Anh: Internet Protocol - giao thức Internet)
là một địa chỉ đơn nhất mà những thiết bị điện tử hiện nay đang sử dụng để nhận diện
và liên lạc với nhau trên mạng máy tính bằng cách sử dụng giao thức Internet
Một cách đơn giản hơn: IP là một địa chỉ của một máy tính khi tham gia vàomạng nhằm giúp cho các máy tính có thể chuyển thông tin cho nhau một cáchchính xác, tránh thất lạc Có thể coi địa chỉ IP trong mạng máy tính giống như địachỉ nhà của bạn để nhân viên bưu điện có thể đưa thư đúng cho bạn chứ không phảimột người nào khác
Bất kỳ thiết bị mạng nào, bao gồm bộ định tuyến, bộ chuyển mạch mạng, máy
vi tính, máy chủ hạ tầng (như NTP, DNS, DHCP, SNMP, v.v.), máy in, máy fax
qua Internet, và vài loại điện thoại khi tham gia vào mạng đều có địa chỉ riêng vàđịa chỉ này là đơn nhất trong phạm vi của một mạng cụ thể Vài địa chỉ IP có giá trị
Trang 14đơn nhất trong phạm vi Internet toàn cầu, trong khi một số khác chỉ cần phải đơnnhất trong phạm vi một công ty.
Địa chỉ IP do Tổ chức cấp phát số hiệu Internet (IANA) quản lý và tạo ra.IANA nói chung phân chia những "siêu khối" đến Cơ quan Internet khu vực, rồi từ
đó lại phân chia thành những khối nhỏ hơn đến nhà cung cấp dịch vụ Internet và
công ty
1.2 Lập trình mạng trong NET Framework
1.2.1 Cơ sở lý thuyết về NET
1.2.1.1 Nền tảng của NET
Microsoft Net không phải là một ngôn ngữ lập trình, đó là một không gianlàm việc tổng hợp bởi bốn bộ ngôn ngữ lập trình: C#, VB.NET, Managed C++, andJ# NET ở đó có sự chồng gối lên nhau của các ngôn ngữ, và được định nghĩatrong FCL (framework class library)
Microsoft .Net bao gồm 2 phần chính: Framework và IntergratedDevelopment Enviroment (IDE) Framework cung cấp những gì cần thiết và cănbản, là khuôn dạng hay môi trường hỗ trợ các hạ tầng cơ sở theo một quy ước nhấtđịnh để công việc được thuận tiện IDE cung cấp một môi trường giúp chúng tatriển khai dễ dàng và được nhanh chóng các ứng dụng dựa trên nền tảng Net
Thành phần Framework là quan trọng nhất NET là cốt lõi và tinh hoa của môitrường, còn IDE chỉ là công cụ để phát triển dựa trên nền tảng đó thôi Trong NETtoàn bộ các ngôn ngữ C#, Visual C++ hay Visual Basic.NET đều dùng cùng một IDE.Microsoft NET là nền tảng cho việc xây dựng và thực thi các ứng dụng phân tánthế hệ kế tiếp Bao gồm các ứng dụng từ client đến server và các dịch vụ khác Một sốtính năng của Microsoft NET cho phép những nhà phát triển sử dụng như sau:
- Một mô hình lập trình cho phép nhà phát triển xây dựng các ứng dụng dịch
vụ web và ứng dụng client với Extensible Markup Language (XML)
Trang 15- Tập hợp dịch vụ XML Web, như Microsoft NET My Services cho phép nhàphát triển đơn giản và tích hợp người dùng kinh nghiệm.
- Cung cấp các server phục vụ bao gồm: Windows 2000, SQL Server, vàBizTalk Server, tất cả điều tích hợp, hoạt động, và quản lý các dịch vụ XML Web
và các ứng dụng
- Các phần mềm client như Windows XP và Windows CE giúp người pháttriển phân phối sâu và thuyết phục người dùng kinh nghiệm thông qua các dòngthiết bị
- Nhiều công cụ hỗ trợ như Visual Studio NET, để phát triển các dịch vụ WebXML, ứng dụng trên nền Windows hay nền web một cách dể dàng và hiệu quả
1.2.1.2 Ngôn ngữ C#
C# là một ngôn ngữ rất đơn giản, với khoảng 80 từ khoá và hơn mười kiểu dữliệu dựng sẵn, nhưng C# có tính diễn đạt cao C# hỗ trợ lập trình có cấu trúc, hướngđối tượng, hướng thành phần (component oriented)
Trọng tâm của ngôn ngữ hướng đối tượng là lớp Lớp định nghĩa kiểu dữ liệumới, cho phép mở rộng ngôn ngữ theo hướng cần giải quyết C# có những từ khoádành cho việc khai báo lớp, phương thức, thuộc tính (property) mới C# hỗ trợ đầy đủkhái niệm trụ cột trong lập trình hướng đối tượng: đóng gói, thừa kế, đa hình
Định nghĩa lớp trong C# không đòi hỏi tách rời tập tin tiêu đề với tập tin cài đặtnhư C++ Hơn thế, C# hỗ trợ kiểu sưu liệu mới, cho phép sưu liệu trực tiếp trong tậptin mã nguồn Đến khi biên dịch sẽ tạo tập tin sưu liệu theo định dạng XML
C# hỗ trợ khái niệm giao diện, interfaces (tương tự Java) Một lớp chỉ có thể
kế thừa duy nhất một lớp cha nhưng có thế cài đặt nhiều giao diện
C# có kiểu cấu trúc, struct (không giống C++) Cấu trúc là kiểu hạng nhẹ và bị giớihạn.Cấu trúc không thể thừa kế lớp hay được kế thừa nhưng có thể cài đặt giao diện C# cung cấp những đặc trưng lập trình hướng thành phần như property, sựkiện và dẫn hướng khai báo (được gọi là attribute) Lập trình hướng component
Trang 16được hỗ trợ bởi CLR thông qua siêu dữ liệu (metadata) Siêu dữ liệu mô tả các lớpbao gồm các phương thức và thuộc tính, các thông tin bảo mật
Assembly là một tập hợp các tập tin mà theo cách nhìn của lập trình viên làcác thư viện liên kết động (DLL) hay tập tin thực thi (EXE) Trong NET mộtassembly là một đơn vị của việc tái sử dụng, xác định phiên bản, bảo mật, và phânphối CLR cung cấp một số các lớp để thao tác với assembly
C# cũng cho truy cập trực tiếp bộ nhớ dùng con trỏ kiểu C++, nhưng vùng mã
đó được xem như không an toàn CLR sẽ không thực thi việc thu dọn rác tự độngcác đối tượng được tham chiếu bởi con trỏ cho đến khi lập trình viên tự giải phóng
1.2.2 Sử dụng các lớp hỗ trợ được xây dựng từ lớp Socket
1.2.2.1 Lớp TCPClient
Dùng giao thức này thì hai bên không cần phải thiết lập kết nối trước khi gửi
do vậy mức dộ tin cậy không cao Để đảm bảo độ tin cậy trong các ứng dụng mạngngười ta còn sử dụng một giao thức khác gọi là giao thức có kết nối: TCP (transportcontrol protocol) Để lập trình theo giao thức TCP, MS.NET cung cấp hai lớp cótên là TCPClient và TCPListener
Các thành phần của lớp TcpClient
- Phương thức khởi tạo:
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 (RemoteHost: 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
Trang 17chuẩn hoặc tên máy.
- Một số thuộc tính:
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
Connected Trạng thái cho biết đã kết nối được đến server hay chưa ?
- Một số phương thức:
Close Giải phóng đối tượng TcpClient nhưng không đóng kết
nối
Connect (RemoteHost,
Port)
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)
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 Readln, writeline tương ứng của các lớp này
1.2.2.2 Lớp TCPListener
TCPListener là một lớp cho phép người lập trình có thể xây dựng các ứngdụng server
Các thành phần của lớp TcpListen:
- Phương thức khởi tạo:
TcpListener (Port: Int32) Tạo một TcpListener và lắng nghe tại cổng chỉ địnhTcpListener (IPAddress,
Trang 18Tên phương thức Mô tả
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 câu lệnh này cho đến khi nào có một kết nối đến).AcceptSocket Chấp nhận một yêu cầu kết nối đang chờ
Pending Cho biết có kết nối nào đang chờ đợi không? (True = có).Start Bắt đầu lắng nghe các yêu cầu kết nối
1.2.2.3 Lớp UDPClient
Giao thức UDP (User Datagram Protocol hay User Define Protocol) là mộtgiao thức phi kết nối có nghĩa là một bên có thể gửi dữ liệu cho bên kia mà khôngcần biết là bên đó có sẵn sàng hay chưa? Giao thức này không tin cậy bằng giaothức TCP nhưng tốc độ của nó nhanh và dễ cài đặt ngoài ra, với giao thức UDP tacòn có thể gửi được gói tin quảng bá đến nhiều máy
Trong NET, lớp UDPClient đóng gói các chức năng của giao thức UDP
- Phương thức khởi tạo:
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 mới của lớp UDPClient Thuộc
một dòng địa chỉ được chỉ định
UdpClient (Int32) Tạo một UdpClient và gắn một cổng cho nó
UdpClient (IPEndPoint) Tạo một UdpClient và gắn một IPEndPoint cho nó.UdpClient (Int32,
Trang 19BeginReceive Nhận dữ liệu không đồng bộ từ máy tính từ 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 Nhận dữ liệu (đồng bộ) do máy tính ở xa gửi
Send Gửi dữ liệu (đồng bộ) cho máy ở xa
1.2.3 Socket không đồng bộ
1.2.3.1 Mô hình xử lý sự kiện của Windows
Mô hình sử lý sự kiện được thể hiện qua mô hình sau:
Hình 1.2 Mô hình xử lý sự kiện trong Windows
Thông qua mô hình này ta có thể ủy nhiệm cho môt thủ tục nào đó thực hiệnkhi sự kiện sảy ra trên Control
1.2.3.2 Sử dụng Socket không đồng bộ
Trang 20Để lập trình không đồng bộ với Socket chúng ta sử dụng các phương thức choviệc sử dụng bất đồng bộ.
Các phương thức cho việc lập trình bất đồng được chia làm 2 loại bắt đầubằng Begin và End:
- Phương thức bắt đầu bằng Begin, bắt đầu một chức năng và được đăng kývới phương thức AsyncCallback
- Bắt đầu bằng End chỉ chức năng hoàn thành khi AsyncCallback đươc gọi.Requests Started By
…
Description of Request Requests Ended BY …
BeginAccept () To accept an incoming
connection
EndAccept ()
BeginConnect () To connect to a remote host EndConnect ()
BeginReceive () To retrieve data from a socket EndReceive ()
BeginReceiveFrom () To retrieve data from a specific
remote host
EndReciveFrom()
BeginSend () To send data from a socket EndSend ()
BeginSendTo () To send data to a specific remote
host
EndSendTo ()
Để chấp nhận kết nối bất đồng bộ ta sử dụng phương thức BeginAccept() vàEndAccept() như sau:
- Phương thức BeginAccept() và EndAccept()
IAsyncResult BeginAccept(AsyncCallback callback, object state) Socket EndAccept(IAsyncResult iar);
Để thiết lập phương thức kết nối theo cách bất đồng bộ ta sử dụng phươngthức BeginConnect() và EndConnect() như sau:
Trang 21- Phương thức BeginConnect() và EndConnect().
Socket newsock = new Socket (AddressFamily.InterNetwork,
Trong đó phương thức Connected thường được viết như sau:
public static void Connected(IAsyncResult iar)
Để gửi dữ liệu bất đồng bộ chúng ta làm như sau:
- Phương thức BeginSend() và EndSend()
BeginSend()
IAsyncResult BeginSend( byte [] buffer, int offset, int size, SocketFlags sockflag, AsyncCallback callback, object state) EndSend()
int EndSend(IAsyncResult iar)
- Trong đó phương thức SendData thường được viết như sau:
private static void SendData(IAsyncResult iar)
Trang 22Socket server = (Socket)iar.AsyncState;
int sent = server.EndSend(iar);
}
Tương tự như giao thức hướng kết nối nếu ta sử dụng gửi dữ liệu theo giao thức không hướng kết nối chúng ta cũng thực hiện tương tự như sau:
- Phương thức BeginSendTo() và EndSendTo()
IAsyncResult BeginSendTo( byte [] buffer, int offset, int size, SocketFlags sockflag, EndPoint ep, AsyncCallback callback, object
state);
Để nhận dữ liệu bất đồng bộ ta thực hiện như sau:
Nhận dữ liệu với giao thức hướng kết nối:
- Phương thức BeginRecieve và EndRecive()
sock.BeginReceive(data, 0, data.Length, SocketFlags.None, new
AsyncCallback(ReceivedData), sock);
Với ReceivedData được định nghĩa như sau:
void ReceivedData(IAsyncResult iar)
{
Socket remote = (Socket)iar.AsyncState;
int recv = remote.EndReceive(iar);
string receivedData = Encoding.ASCII.GetString(data, 0,
Trang 23- Phương thức BeginReceiveFrom() và EndReceiveFrom()
sock.BeginReceive(data,0,data.Length,SocketFlags.None,refiep, new
AsyncCallback (ReceiveData) , sock);
void ReceiveData(IasyncResult iar)
{
Socket remote = (Socket)iar.AsyncState;
int recv = remote.EndReceiveFrom(iar);
string stringData = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringData);
Tuyến (Thread ): trong hệ thống một tiến trình có thể có một hoặc nhiều chuỗithực hiện tách biệt khác nhau và có thể chạy đồng thời mỗi chuỗi thực hiện nàyđược gọi là 1 tuyến (Thread) Trong 1 ứng dụng Thread khởi tạo đầu tiên gọi làThread sơ cấp hay Thread chính
1.2.4.2 Sử dụng Thread trong chương trình Net
Để sử dụng Thread trong NET ta sử dụng namespace System.Threading
Một số phương thức thường dùng:
Trang 24Abort () Kết thúc Thread.
Join () Buộc chương trình phải chờ cho thread kết thúc (Block) thì
mới thực hiện tiếp (các câu lệnh đứng sau Join)
Resume () Tiếp tục chạy thread đã tạm ngừng – suspended
Sleep () Static method: tạm dừng thread trong một khoảng thời gian.Start () Bắt đầu chạy (khởi động) một thread Sau khi gọi phương thức
này, trạng thái của thread chuyển từ trạng thái hiện hành sang Running
Suspend () Tạm ngưng thread (phương thức này được loại khỏi phiên bản
VS.NET 2005)
Một số thuộc tính thường dùng:
CurrentThread This static property: trả về thread hiện hành đang chạy.IsAlive Trả về giá trị cho biết trạng thái thực thi của thread hiện
Priority Sets or gets giá trị để chỉ định độ ưu tiên ( dành nhiều hay ít
CPU cho thread) Cao nhất là 4, thấp nhất là 0
ThreadState Lấy về trạng thái của thread (đang dừng, hay đang chạy…)