Các máy tính được sử dụng để chạy cáctiến trình client/server có nhiều kiểu khác nhau và không cần thiết phải phân biệt giữachúng, cả tiến trình client và tiến trình server đều có thể ch
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
Tel (84-511) 3736 949, Fax (84-511) 842 771Website: itf.dut.edu.vn, E-mail: cntt@edu.ud.vn
LUẬN VĂN TỐT NGHIỆP KỸ SƯ
NGÀNH CÔNG NGHỆ THÔNG TIN
MÃ NGÀNH : 05115
ĐỀ TÀI:
PHÁT TRIỂN HỆ THỐNG TRÒ CHƠI TRÊN ĐIỆN THOẠI
DI ĐỘNG DỰA TRÊN NỀN TẢNG CÔNG NGHỆ J2ME,
KẾT HỢP XÂY DỰNG WEBSITE
Mã số: 06T3-014
06T3-021 06T3-040 06T2-026 Ngày bảo vệ: 15-16/06/2011
SINH VIÊN : Bùi Vũ Nhật Hoàng 06T3
Phan Linh 06T3
Lê Khắc Thọ 06T3 Nguyễn Thị Hồng Phúc 06T2 CBHD : ThS Lâm Tùng Giang
ĐÀ NẴNG, 06/2011
Trang 2Lời đầu tiên chúng em muốn nói, chúng em xin chân thành cảm ơn các thầy cô trong khoa Công nghệ thông tin cũng như các thầy cô giảng dạy trong trường Đại học Bách khoa, Đại học Đà Nẵng đã truyền đạt những kiến thức quý báu chochúng em trong những năm học vừa qua.
Đặc biệt, chúng em xin chân thành cảm ơn anh Lâm Tùng Giang- Phó Giám đốc Trung tâm tin học Văn phòng UBND Thành phố Đà Nẵng đã tận tình hướng dẫn, động viên và giúp đỡ em trong suốt thời gian thực hiện đề tài.
Cuối cùng chúng em xin cảm ơn các bạn trong khoa Công Nghệ Thông Tin, những người đã giúp đỡ, chia sẽ những kiến thức, kinh nghiệm, tài liệu…trong suốt quá trình nghiên cứu thực hiện đề tài.
Một lần nữa, chúng em xin chân thành cảm ơn!
Đà Nẵng, ngày 5 tháng 6 năm 2011 Nhóm sinh viên,
Bùi Vũ Nhật Hoàng 06T3 Phan Linh
Lê Khắc Thọ
06T3 06T3 Nguyễn Thị Hồng Phúc 06T2
Trang 3Chúng em xin cam đoan :
1 Những nội dung trong luận văn này là do chúng em thực hiện dưới sự hướng dẫn trực tiếp của anh Lâm Tùng Giang.
2 Mọi tham khảo dùng trong luận văn đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố.
3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, chúng em xin chịu hoàn toàn trách nhiệm.
Nhóm sinh viên, Bùi Vũ Nhật Hoàng 06T3 Phan Linh
Lê Khắc Thọ
06T3 06T3 Nguyễn Thị Hồng Phúc 06T2
Trang 4
Đà Nẵng, ngày … tháng … năm 2011
Cán bộ hướng dẫn
Th.s Lâm Tùng Giang
Trang 5
Đà Nẵng, ngày … tháng … năm 2011 Hội Đồng bảo vệ
Trang 6I Giới thiệu đề tài 2
II Mục đích, ý nghĩa của đề tài 2
II.1 Mục đích 2
II.2 Ý nghĩa 3
III Phương pháp triển khai đề tài 3
III.1 Các bước thực hiện 3
III.2 Dự kiến kết quả đạt được 4
CƠ SỞ LÝ THUYẾT VÀ THUẬT TOÁN 5
I Mô hình Client/Server6
II Giao thức điều khiển truyền dữ liệu TCP 8
III Giới thiệu về Socket 10
IV Tìm hiểu về Thread và MultiThread 12
IV.1 Tuyến đoạn 12
IV.2 Đa tuyến đoạn(MultiThread) 14
IV.3 Thiết lập các tuyến đoạn 15
IV.4 Thứ tự ưu tiên tuyến đoạn 18
IV.5 Cơ chế đồng bộ hóa 19
V Giới thiệu chung về ASP.NET 21
V.1 Tìm hiểu về Net Platform 21
V.2 Tìm hiểu về Net Framework 22
V.3 Tìm hiểu về ASP.Net 26
V.4 Quá trình xử lý tập tin ASPX 27
V.5 Phân loại tập tin trong ASP.Net 28
V.6 Những ưu điểm của ASP.Net 28
VI SQL Server 2005 30
VI.1 Giới thiệu chung về SQL Server 30
VI.2 Các ấn bản của SQL Server 30
VI.3 Các thành phần của SQL Server 31
VI.4 Mô hình hoạt động của SQL server trên mạng máy tính 33VII Máy ảo java cho các điện thoại di động 36
VIII Lập trình java cho Mobile 37
VIII.1 Ngôn ngữ java 37
VIII.2 So sánh công nghệ Java và Microsoft.Net 38
VIII.3 Giới thiệu về J2ME 39
IX J2ME game API 46
IX.1 Layer class 46
IX.2 Sprite Class 47
IX.3 TiledLayer class 48
IX.4 LayerManager class 49
X Giới thiệu về thuật toán 50
X.1 Dạng trò chơi 50
X.2 Cây trò chơi 51
Trang 7II.1 Đặc tả yêu cầu người sử dụng68
II.2 Phân tích cấu trúc chương trình 69
II.3 Xác định các tác nhân(actors) 77
II.4 Xây dựng sơ đồ Use Case 78
II.5 Xây dựng sơ đồ tuần tự 86
IV.1 Đặc tả tổng quan hệ thống website 101
IV.2 Xây dựng sơ đồ Use Case của hệ thống website 103IV.3 Xây dựng sơ đồ tuần tự 106
IV.4 Xây dựng sơ đồ hoạt động 112
IV.5 Sơ đồ Lớp 116
IV.6 Thiết kế cơ sở dữ liệu 119
TRIỂN KHAI CHƯƠNG TRÌNH 126
II.1 Ưu điểm 148
II.2 Nhược điểm 149
III Hướng phát triển 150
Trang 8Hình 1: Mô hình client-server 7
Hình 2: Kết nối 2 chiều 9
Hình 3: Một phiên kết nối socket 10
Hình 4: Mối quan hệ giữa một thread và một chương trình 12
Hình 5: Chu trình sống của một tuyến đoạn 13
Hình 6 Các loại hình dịch vụ 21
Hình 7: Kiến trúc Net Framework 22
Hình 8: Hệ thống tên miền (Namespace) 25
Hình 9: Quá trình xử lý tập tin ASPX 27
Hình 10: Cơ chế hoạt động của ASP.Net 29
Hình 11: Các thành phần của SQL Server 31
Hình 12: SQL Server tools 32
Hình 13: Mô hình chung SQL Server trên mạng 33
Hình 14: Mô hình SQL trên Desktop 34
Hình 15: Mô hình Client/Server 34
Hình 16: Chi tiết mô hình Client/Server 35
Hình 17: Mô hình kết nối ứng dụng trên mạng Internet 36
Hình 18: Biểu diễn tiến trình xây dựng ứng dụng MIDlet hoàn chỉnh và vai trò của KVM 37
Hình 19: Quá trính phát triển của Java 38
Hình 20: So sánh Java và Net 38
Hình 21: Kiến trúc của J2ME 39
Hình 22: Một số mẫu điện thoại 41
Hình 23: Ví dụ MIDLet 42
Hình 24: Chu kì sống của các ứng dụng MIDlet 43
Hình 25: Quản lý màn hình của ĐTDĐ 44
Hình 26: Đồ họa mức cao 44
Hình 27: Canvas và Graphics 45
Hình 28: Sprite 47
Hình 29: TiledLayer 49
Hình 30: Một số trò chơi đối kháng (trò chơi Minimax) 51
Hình 31: Cây trò chơi 52
Hình 32: Cây tìm kiếm và sự bùng nổ tổ hợp 53
Hình 33: Ví dụ một phần cây trò chơi 54
Hình 34: Thuật toán Minimax 54
Hình 35: Thuật toán AlphaBeta 60
Hình 36: Sơ đồ tổng quan hệ thống 63
Hình 37: Sơ đồ Use Case hệ thống 68
Hình 38: Sơ đồ cấu trúc trò chơi 70
Hình 39: Giao diện GAPS flatform 71
Hình 40: GASP Log On 72
Hình 41: Lobby Room 72
Hình 42: Waiting Room 73
Hình 43: In Game 73
Hình 44: quan hệ giữa các lớp 76
Trang 9Hình 48: Sơ đồ Use Case tổng quan trong chế độ chơi offline 81
Hình 49: Sơ đồ Use Case mô tả hoạt động Player trong chế độ chơi online 82
Hình 50: Sơ đồ Use Case hoạt động của Server trong chế độ chơi online 83
Hình 51: Sơ đồ Use Case hoạt động của Board trong chế độ chơi online 84
Hình 52: Sơ đồ Use Case tổng quan trong chế độ chơi online 85
Hình 53: Sơ đồ biểu diễn quá trình làm việc của hệ thống trong chế độ chơi offline 86
Hình 54: Sơ đồ biểu diễn quá trình làm việc của hệ thống chế độ chơi online 87
Hình 55: Mô hình tổng thể phần server 88
Hình 56: Sơ đồ quản lý đăng nhập của người chơi vào hệ thống 88
Hình 57: Sơ đồ quản lý ván cờ 89
Hình 58: Quản lý các session 89
Hình 59: Sơ đồ ca sử dụng tổng quát của hệ thống server 92
Hình 60: Use case quản lý đăng nhập người chơi 92
Hình 61: Use case quản lý việc xem ván cờ 93
Hình 62: BDTT xử lý các hành động ở màn hình đăng nhập hệ thống 94
Hình 63: BDTT xử lý các hành động lấy thông tin session từ hệ thống 95
Hình 64: BDTT xử lý hành động kết nối vào một session 96
Hình 65: BDTT xử lý việc chờ kết nối từ người chơi khác kết nối vào session 97
Hình 66: BDTT xử lý trạng thái chơi game 98
Hình 67: BDTT xử lý xem thông tin ván cờ trên web 99
Hình 68: Sơ đồ lớp Server 100
Hình 69: Mô hình tổng quan của hệ thống 102
Hình 70: Sơ đồ Use case cho khách 103
Hình 71: Sơ đồ Use case cho người dùng 104
Hình 72: Sơ đồ Use case cho Admin 105
Hình 73: Sơ đồ tuần tự đăng nhập 106
Hình 74: Sơ đồ tuần tự download Game 107
Hình 75: Sơ đồ tuần tìm kiếm 108
Hình 76: Sơ đồ tuần bình luận 109
Hình 77: Sơ đồ tuần quản lý chung 110
Hình 78: Sơ đồ hoạt động đăng nhập 112
Hình 79: Sơ đồ hoạt động download 113
Hình 80: Sơ đồ hoạt động bình luận 114
Hình 81: Sơ đồ hoạt động quản lý chung 115
Hình 82: Sơ đồ lớp tầng BOL 116
Hình 83:Sơ đồ lớp tầng DAL 117
Hình 84: Sơ đồ lớp tầng BAL 118
Hình 85 Sơ đồ quan hệ thực thể 125
Hình 86: Game start 126
Hình 87: Chọn chế độ âm thanh 127
Hình 88: Menu chính 127
Hình 89: Chế độ chơi offline 128
Hình 90: Play game 128
Hình 91: Login 129
Hình 92: Chọn phòng chơi 129
Hình 93: Bắt đầu chơi game 130
Trang 10Hình 97: Giao diện chơi game ở chế độ offline 134
Hình 98: Giao diện help 135
Hình 99: Server đáp ứng việc login và lấy thông tin session 136
Hình 100: Server đáp ứng việc kết nối vào session 137
Hình 101: Server xử lý quá trình kết thúc game 138
Hình 102: Màn hình trang chủ 139
Hình 103: Màn hình trang đăng kí 140
Hình 104: Màn hình trang bình luận cho Game 141
Hình 105: Mạn hình trang bầu chọn cho Game 142
Hình 106: Xem danh sách Game theo danh mục 143
Hình 107: Màn hình trang liên hệ 143
Hình 108: Màn hình trang cập nhật thông tin cá nhân 144
Hình 109: Màn hình trang thay đổi mật khẩu 144
Hình 110: Màn hình trang quản lý Game 145
Hình 111: Thêm một Game mới (bước 1) 146
Hình 112: Thêm một Game mới (bước 2) 147
Trang 11Bảng 1: Phân loại tập tin trong ASP.NET 28
Bảng 2: Xác định các tác nhân của hệ thống 64
Bảng 3: Các ca sử dụng của Client 66
Bảng 4: Các ca sử dụng của Server 66
Bảng 5: Xác định các ca sử dụng Website 67
Bảng 6: Xác định các tác nhân 90
Bảng 7: Xác định các ca sử dụng Server 91
Bảng 8: Role 119
Bảng 9: Account 120
Bảng 10: Brand 120
Bảng 11: Model 121
Bảng 12: Categories 121
Bảng 13: Comment 121
Bảng 14: Rating 122
Bảng 15: Feedback 122
Bảng 16: JoinGame 122
Bảng 17: Score 123
Bảng 18: Level 123
Bảng 19: SaveBoard 123
Bảng 20: Games 124
Trang 13I Giới thiệu đề tài
Ngày nay, sự phát triển về nhu cầu sở hữu các thiết bị kỹ thuật số mà trong đó thiết
bị di động có thị phần khá lớn Sự đòi hỏi về mẫu mã, chất lượng dịch vụ mà đặc biệt
là tính năng của chiếc điện thoại, các phần mềm tiện ích đi kèm đã kéo theo sự pháttriển của các hệ điều hành để các nhà phát triển ứng dụng có thể thực hiện các ý tưởngcủa mình Các hệ điều hành phổ biến đó như: Windows Mobile, Linux Mobile,Symbian
Cùng với tốc độ phát triển đó là những tiến bộ vượt bậc về tốc độ xử lý Nhờ đó lậptrình các ứng dụng cho loại thiết bị này tăng lên nhanh chóng, đặc biệt là các dịch vụgiá trị gia tăng trên mạng di động như SMS, RSS, WAP và ứng dụng dịch vụ game.Qua tìm hiểu về, chúng em thấy thị trường game di động tại Việt Nam đang phát triển
và có tiềm năng lớn Vì vậy nhóm chúng em quyết định chọn đề tài “ Phát triển hệ
thống trò chơi trên điện thoại di động dựa trên nền tảng công nghệ J2ME, kết hợp xây dựng Website”.
Hệ thống được xây dựng với các thành phần sau:
- Chương trình client chạy trên mobile bao gồm 2 trò chơi: cờ tướng và cờ Caro.Với chương trình này người chơi có thể có thể chơi ở chế độ offline hay giao lưu họchỏi ở những người chơi khác thông qua chế độ online được kết nối thông qua server
năng quản lý việc đăng nhập của người chơi, quản lý kết nối vào các phòng chơi trênserver, quản lý việc trao đổi thông tin giữa 2 người chơi, quản lý ván cờ đã lưu trên hệthống
download, bình luận, bầu chọn cho Game, quản lý đăng nhập và đăng ký, quản lýthông tin cá nhân, thay đổi hoặc khôi phục mật khấu, xem điểm của các trò chơi đãtừng tham gia Đối với quản trị viên thì ngoài các chức năng của người dùng còn cóthể quản lý Game, upload Game, quản lý người dùng, quản lý các danh mục, quản lýđiểm của người chơi…
II Mục đích, ý nghĩa của đề tài
Trang 14quảng bá game, cung cấp thông tin cũng như cho phép người dùng download game vềmáy.
Cố gắng phát triển ứng dụng có tính chất thực tiễn cao, có khả năng thu hút ngườidùng nếu có cơ hội triển khai thực tế
Nhằm tạo ra những sản phẩm game trí tuệ phục vụ cho nhiều đối tượng người dùng
ở mọi lứa tuổi
Thông qua phát triển hệ thống để đánh giá lại khả năng của bản thân và tổng kếtnhững kiến thức kĩ năng đã được học trong nhà trường trong những năm qua như kĩnăng làm việc nhóm, kĩ năng lập trình Đồng thời nghiên cứu tiếp thu thêm kiến thức
và kĩ năng mới : nghiên cứu thuật toán, nghiên cứu về lập trình, nghiên cứu công nghệmới …
Đặc biệt với chế độ online có thể tạo cơ hội giao lưu giữa những ngươi chơi game,tạo ra một cộng đồng những người đam mê các trò chơi trí tuệ
III Phương pháp triển khai đề tài
- Xác định nội dung cần thực hiện đối với từng module (client, server, website)
Trang 15III.2 Dự kiến kết quả đạt được
Xây dựng được hệ thống hoàn chỉnh bao gồm:
chế độ online và offline, lưu game, lưu điểm, tùy chỉnh cấp độ chơi, tiếp tục chơigame đã lưu…
các session và các ván cờ đã chơi
Game cho người dùng, cho phép download, tìm kiếm, bình luận, bình chọn cho Gametương ứng Qua đó người dùng có thể tìm kiếm các Game hay và tương thích với điệnthoại của mình
Trang 17tán là mô hình client/server Trong mô hình này sẽ có một tập các tiến trình mà mỗitiến trình đóng vai trò như là một trình quản lý tài nguyên cho một tập hợp các tàinguyên cho trước và một tập hợp các tiến trình client trong đó mỗi tiến trình thựchiện một tác vụ nào đó cần truy xuất tới tài nguyên phần cứng hoặc phần mềm dùngchung Bản thân các trình quản lý tài nguyên cần phải truy xuất tới các tài nguyêndùng chung được quản lý bởi một tiến trình khác, vì vậy một số tiến trình vừa là tiếntrình client vừa là tiến trình server Các tiến trình phát ra các yêu cầu tới các server bất
kỳ khi nào chúng cần truy xuất tới một trong các tài nguyên của các server Nếu yêucầu là đúng đắn thì server sẽ thực hiện hành động được yêu cầu và gửi một đáp ứngtrả lời tới tiến trình client
Mô hình client/server cung cấp một cách tiếp cận tổng quát để chia sẻ tài nguyêntrong các hệ thống phân tán Mô hình này có thể được cài đặt bằng rất nhiều môitrường phần cứng và phần mềm khác nhau Các máy tính được sử dụng để chạy cáctiến trình client/server có nhiều kiểu khác nhau và không cần thiết phải phân biệt giữachúng, cả tiến trình client và tiến trình server đều có thể chạy trên cùng một máy tính.Một tiến trình server có thể sử dụng dịch vụ của một server khác
Mô hình truyền tin client/server hướng tới việc cung cấp dịch vụ Quá trình trao đổi
dữ liệu bao gồm:
- Truyền một yêu cầu từ tiến trình client tới tiến trình server
Mô hình truyền tin này liên quan đến việc truyền hai thông điệp và một dạng đồng
bộ hóa cụ thể giữa client và server Tiến trình server phải nhận thức được thông điệpđược yêu cầu ở bước một ngay khi nó đến và hành động phát ra yêu cầu trong clientphải được tạm dừng (bị phong tỏa) và buộc tiến trình client ở trạng thái chờ cho tớ khi
nó nhận được đáp ứng do server gửi về ở bước ba
Mô hình client/server thường được cài đặt dựa trên các thao tác cơ bản là gửi (send)
và nhận (receive)
Trang 18Hình 1: Mô hình client-server
Quá trình giao tiếp client và server có thể diễn ra theo một trong hai chế độ: bịphong tỏa (blocked) và không bị phong tỏa (non-blocked)
Chế độ bị phong tỏa (blocked):
Trong chế độ bị phong tỏa, khi tiến trình client hoặc server phát ra lệnh gửi dữ liệu(send), việc thực thi của tiến trình sẽ bị tạm ngừng cho tới khi tiến trình nhận phát ralệnh nhận dữ liệu (receive)
Tương tự đối với tiến trình nhận dữ liệu, nếu tiến trình nào đó (client hoặc server)phát ra lệnh nhận dữ liệu, mà tại thời điểm đó chưa có dữ liệu gửi tới thì việc thực thicủa tiến trình cũng sẽ bị tạm ngừng cho tới khi có dữ liệu gửi tới
Chế độ không bị phong tỏa (non-blocked):
Trong chế độ này, khi tiến trình client hay server phát ra lệnh gửi dữ liệu thực sự,việc thực thi của tiến trình vẫn được tiến hành mà không quan tâm đến việc có tiếntrình nào phát ra lệnh nhận dữ liệu đó hay không
Tương tự cho trường hợp nhận dữ liệu, khi tiến trình phát ra lệnh nhận dữ liệu, nó
sẽ nhận dữ liệu hiện có, việc thực thi của tiến trình vẫn được tiến hành mà không quantâm đến việc có tiến trình nào phát ra lệnh gửi dữ liệu tiếp theo hay không
Tiến trình đang phong
tỏa
Tiến trình đang xử lý
Request message
Request message
Reply ExecutionWait
ServerClient
Trang 19II Giao thức điều khiển truyền dữ liệu TCP
Trong 2 giao thức ở Lớp giao vận (Transport Layer), TCP là giao thức được sửdụng nhiều nhất Đây là giao thức hướng kết nối (connection-oriented), có 5 đặc trưngcủa dịch vụ chuyển phát đáng tin cậy:
sử dụng) truyền những khối lượng lớn dữ liệu, chúng ta xem dữ liệu này là một chuỗicác bit, được chia thành các octet 8 bit, mà chúng ta thường gọi là byte Dịch vụchuyển phát stream tên máy đích chuyển đến nơi nhận một cách chính xác cùng mộtchuỗi các octet mà máy gửi chuyển đi
một cuộc gọi điện thoại Trước khi việc truyền có thể bắt đầu, cả hai chương trình ứngdụng gửi và chương trình ứng dụng nhận tương tác với hệ điều hành, thông báo vềmong muốn có được việc truyền stream Về mặt khái niệm, một chương trình ứngdụng sẽ thực hiện một "cuộc gọi" mà phải được đầu kia chấp nhận, tức thiết lập mộtkết nối – hay mạch ảo - để truyền và nhận dữ liệu một cách chính xác
qua mạch ảo bằng cách lặp lại việc chuyển các octet dữ liệu đến phần mềm giao thức.Khi truyền dữ liệu, mỗi chương trình ứng dụng sử dụng bất kỳ kích thước đơn vịtruyền nào nó thấy thuận tiện, có thể chỉ bằng một octet Tại đầu nhận, phần mềm giaothức phát chuyển tự động dữ liệu theo đúng chính xác thứ tự mà chúng được gửi đi,làm cho chúng sẵn sàng được sử dụng đối với chương trình ứng dụng nhận, ngay saukhi chúng được nhận và kiểm tra Phần mềm giao thức được tự do phân chia dòng dữliệu thành những gói dữ liệu độc lập với đơn vị mà chương trình ứng dụng truyền đi
Để làm cho việc truyền hiệu quả hơn và tối thiểu giao thông trên mạng, các cài đặtthường tập hợp cho đủ dữ liệu từ dòng dữ liệu để đặt vào datagram có độ lớn thíchhợp trước khi truyền nó qua Internet
xác định các dòng dữ liệu có cấu trúc Lấy ví dụ, chương trình trả lương nhân viên,không có cách nào để dịch vụ stream đánh dấu biên giới giữa các bản ghi nhân viên,hay để xác định nơi dừng của dòng dữ liệu là dữ liệu nhân viên Các chương trình ứngdụng sử dụng dịch vụ stream phải hiểu nội dung stream và thống nhất với nhau địnhdạng stream trước khi khởi động việc kết nối
truyền đồng thời từ cả hai chiều Cách kết nối này được gọi là song công (full deplex)
Từ quan điểm của một tiến trình ứng dụng, một kết nối hai chiều bao gồm 2 dòng dữliệu độc lập “chạy” theo hai chiều ngược nhau, và không có tương tác hay va chạm.Dịch vụ stream cho phép một tiến trình ứng dụng chấm dứt "dòng chảy" theo mộtchiều trong khi dữ liệu vẫn tiếp tục "chạy" theo chiều kia, làm cho kết nối trở thànhmột chiều (half duplex) Ưu điểm chính của kết nối hai chiều là phần mềm giao thức
cơ sở có thể gửi thông tin điều khiển cho một stream ngược trở về nguồn trong những
Trang 20datagram đang chuyển tải dữ liệu theo chiều ngược lại Điều này làm giảm bớt giaothông trên mạng.
Hình 2: Kết nối 2 chiều
Vào đầu mỗi phiên TCP, máy tính gửi và nhận dữ liệu thực hiện thủ tục bắt tay 3bước Mỗi bước sử dụng một segment chỉ có phần đầu TCP mà không có dữ liệu Đầutiên, máy tính gửi dữ liệu gửi tới máy nhận dữ liệu một segment có các thông tin sau:
Cờ đồng bộ (đặt ở vùng Flag) được thiết lập về trạng thái bật (on), Sequence numbercho segment được gửi sau đó và giá trị của kích thước của vùng đệm dữ liệu (windowsize) của nó Kế tiếp, máy tính nhận dữ liệu sẽ hồi đáp bằng một segment với cácthông tin: cờ đồng bộ cũng ở trạng thái bật, sequence number thiết lập với giá trị củasegment nó dự định sẽ nhận từ máy tính gửi dữ liệu và kích thước vùng đệm dữ liệu.Cuối cùng, máy tính gửi dữ liệu sẽ gửi một acknowledgemnet với sequence number
mà máy tính nhận dữ liệu đã dự tính ở bước thứ hai Qua thủ tục này, 2 máy tính sẽsẵn sàng cho quá trình truyền và nhận dữ liệu Trong thủ tục bắt tay 3 bước, mỗi máytính cũng điều khiển kích thước của vùng đệm gửi dữ liệu phù hợp với kích thước củacửa vùng đệm nhận dữ liệu TCP sẽ nhận dữ liệu từ lớp ứng dụng (ApplicationLayrer) ở trên nó, chia dữ liệu thành các segment và gắn cho mỗi segment phần đầuTCP TCP chỉ gửi đi các segment vừa với kích thước vùng đệm gửi dữ liệu của nó vàkhởi động một bộ đếm (timer) cho segment được gửi Nếu bộ đếm đáo hạn (time out)
mà máy tính nhận dữ liệu vẫn chưa trả lời xác nhận, máy tính gửi dữ liệu sẽ gửi lạisegment Khi TCP nhận được acknowledgement cho segment đã gửi, só sẽ tiếp tục gửicác segment đang chờ gửi Sau khi tất cả dữ liệu đã được gửi đi và xác nhận, TCPđóng phiên làm việc hiện thời
ACK=100
Trang 21III Giới thiệu về Socket
Một socket là một điểm kết nối truyền thông (đầu cuối) mà bạn cần 1 tên (name) vàđịa chỉ (address) trên mạng Socket có thể sử dụng trên các hệ thống giống nhau hoặccác hệ thống khác nhau trên các mạng khác nhau Socket hữu dụng cho cả ứng dụngđộc lập và ứng dụng mạng Socket cho phép bạn thay đổi thông tin giữa việc xử lý cáctrên các máy giống nhau và hai bên đầu cuối trên một mạng và cho phép truy xuất mộtcách dễ dàng tới các dữ liệu trung tâm
Socket phần lớn được sử dụng cho việc truyền thông giữa client và server Điểnhình là cấu hình server trên 1 máy và client trên 1 máy khác Client kết nối tới server,trao đổi thông tin và sau đó kết thúc việc truyền thông, chúng sẽ ngắt kết nối
Một socket có một loạt các khả năng Trong một kết nối kiểu client-to-server,socket trên server sẽ đợi xử lý các yêu cầu từ một client Để làm điều này, server đầutiên phải thiết lập một địa chỉ mà các client dựa vào đó để tìm server Khi địa chỉserver được thiết lập, server sẽ đợi cho các client gửi yêu cầu về 1 dịch vụ Dữ liệu lúc
đó sẽ được trao đổi thông qua socket Server thực hiện yêu cầu từ các client và gửiphản hồi lại cho client
Hình 3: Một phiên kết nối socket
Trang 22Bước 1: Hàm socket() tạo một điểm kết nối (endpoint – đầu cuối) cho việc kết nối
và trả lại một ký hiệu nhận diện socket tương ứng với điểm kết nối (endpoint)
Bước 2: Khi một ứng dụng có một ký hiệu nhận diện socket, nó có thể gán 1 tênduy nhất cho socket Server phải gán 1 tên để có thể truy xuất tới mạng
Bước 3: Hàm listen() cho thấy sự sẵn sàng để chấp nhận yêu cầu kết nối từ phíaclient
Bước 4: Ứng dụng Client sử dụng hàm connect() trên một stream socket để thựchiện kết nối tới server
Bước 5: Ứng dụng server sử dụng hàm accept() để chấp nhận yêu cầu kết nối từ 1client Server phải thực hiện hàm bind() và listen() thành công trước khi nó có thểthực hiện hàm accept()
Bươc 6: Khi một kết nối được thực hiện giữa Client và Server, chúng ta có thể dùngmột số hàm truyền dữ liệu Socket API Các Client và Server có nhiều hàm truyền dữliệu để lựa chọn như send(), recv(), read(), write()
Bước 7: Khi Server hoặc Client muốn ngừng việc truyền thông, nó thực hiện hàmclose() để để giải phóng tài nguyên mà hệ thống bỏ ra cho socket
Trang 23IV Tìm hiểu về Thread và MultiThread
IV.1.1 Khái niệm về tuyến đoạn
Nhiều người lập trình đều quen thuộc với việc viết những chương trình liên tục.Các chương trình như: hiển thị "Hello Word", sắp xếp một danh sách các tên hoặc tínhtoán một dãy các số nguyên tố Đó là những chương trình tuần tự Tức là mỗi chươngtrình đều có bắt đầu rồi đến thực thi và cuối cùng là kết thúc
Một tuyến đoạn thì tương tự như những chương trình tuần tự vừa mới được mô tả.Một tuyến đoạn đơn cũng có một sự bắt đầu, trình tự, và phần cuối Tuy nhiên, bảnthân một tuyến đoạn không phải là một chương trình, nó không thể tự ý chạy, nó chỉ
có thể chạy bên trong một chương trình
Hình 4: Mối quan hệ giữa một thread và một chương trình
Như vậy tuyến đoạn đơn là một dòng liên tục đơn điều khiển bên trong một chươngtrình
Những chương trình đơn tuyến đoạn chứa những câu lệnh mà thi hành trong mộttuần tự rất nhanh, nhưng chỉ một câu lệnh là thi hành tại một thời điểm Khi một máytính chứa một CPU, nó chỉ có thể thi hành một chỉ lệnh máy tại một thời điểm Khibạn sử dụng một máy tính với nhiều CPU, máy tính đó có thể thi hành nhiều chỉ dẫnmáy cùng lúc
a thread
a program
Trang 24IV.1.2 Chu trình sống của một tuyến đoạn
Hình 5: Chu trình sống của một tuyến đoạn
Một tuyến đoạn có thể ở một trong các trạng thái sau:
- New: Khi một luồng mới được tạo ra với toán tử new() và sẵn sàng hoạt động
nó gọi hàm start() Bộ lập lịch phân luồng của hệ điều hành sẽ quyết định luồng nào sẽđược chuyển về trạng thái Runnable và hoạt động Cũng cần lưu ý rằng ở một thờiđiểm, một luồng ở trạng thái Runnable có thể hoặc không thể thực hiện
thực hiện (“bị chặn”) khi gọi một trong các hàm: sleep(), suspend(), wait(), hay bịchặn lại ở Input/output
thường, hoặc gặp phải ngoại lệ không thực hiện tiếp được Trong trường hợp đặc biệt,bạn có thể gọi hàm stop() để kết thúc (“giết chết”) một luồng
BlockedWaiting
resume() Suspend()
yield()
Wait() Notify() Start()
Stop()
Sleep()
Bị chặn bởi I/O
Kết thúc bởi I/O
Trang 25IV.2 Đa tuyến đoạn(MultiThread)
IV.2.1 Đa nhiệm(Multitasking)
Khả năng máy tính chạy cùng một lúc nhiều chương trình, như là trong khi xử lývăn bản có thể nghe nhạc, đó là tính đa nhiệm
Với tính đa nhiệm thì hệ điều hành quyết định khi nào thì chuyển bộ xử lý từ ứngdụng này sang ứng dụng khác đang đợi nó Hệ điều hành chuyển bộ xử lý mà khôngcần chương trình ứng dụng cho phép
Hệ điều hành bảo vệ mỗi quá trình với tất cả các quá trình khác, lỡ khi một chươngtrình gặp sự cố, nó sẽ không làm hỏng toàn bộ máy tính
IV.2.2 Đa tuyến đoạn(multithreading)
Ngôn ngữ lập trình Java cho phép bạn bắt đầu hay khởi động nhiều tuyến đoạn màkhông có vấn đề gì liên quan đến bộ xử lý mà ban đang sử dụng Nếu bạn sử dụng hệthống máy tính mà có nhiều hơn một CPU, nhiều tuyến đoạn có thể thi hành cùng lúc Nếu bạn sử dụng một máy tính với một bộ xử lý đơn, nhiều tuyến đoạn chia sẻ thờigian của CPU CPU cấp một lượng thời gian nhỏ cho một nhiệm vụ, và cấp lượng thờigian nhỏ khác cho nhiệm vụ khác CPU chưa bao giờ thực sự thực hiện hai nhiệm vụcùng lúc Thay vào đó, nó thực hiện một chút nhiệm vụ này, sau đó nó lại thực hiệnmột chút nhiệm vụ khác CPU thực hiện quá nhanh đến nỗi mà mỗi một nhiệm vụđang thi hành dường như không bị ngắt quãng giữa chừng
Như vậy: Đa tuyến đoạn là nhiều hơn một tuyến đoạn đang chạy trong sự songsong hoặc cùng lúc
Bất cứ một chương trình ứng dụng nào cũng có ít nhất một tuyến đoạn, là Threadđầu tiên của chương trình (hoặc là Thread chính) Chúng ta có thể bắt đầu hay thêmvào cũng như kết thúc những Thread mới khi chúng ta cần, nhưng Thread chính thìgiữ tiến trình cùng lúc với chương trình ứng dụng đang chạy
Trong chế độ đa tuyến đoạn:
- Không có cơ chế bảo vệ giữa các tuyến đoạn Mỗi tuyến đoạn trong Java có thểchạy độc lập với tất cả tuyến đoạn khác trong chương trình đó, song cũng có thể giaotiếp với các tuyến đoạn khác nếu cần, mọi tuyến đoạn đều chia sẻ chung tập hợp cácđối tượng và biến
đoạn khác Ví dụ, giả sử có một tuyến đoạn thực hiện chỉ lệnh theo hướng "if " củacâu lệnh if-else, trong khi tuyến đoạn khác thi hành chỉ lệnh theo hướng " else"
Vậy làm sao JVM có thể theo dõi được sự thực thi của mỗi tuyến đoạn? JVM sẽcấp cho mỗi tuyến đoạn phương thức của nó- gọi ngăn xếp( call stack) Ngoài việc
Trang 26theo dõi chỉ lệnh byte hiên thời, phương thức "call stacks" còn theo dõi những biến địaphương, những tham số của phương thức và giá trị trả về của phương thức đó.
IV.2.3 Tại sao phải sử dụng đa tuyến đoạn
Người dùng không thích các phần mềm không đáp ứng được yêu cầu Khi clickchuột, người dùng thường mong đợi chương trình đáp ứng ngay lập tức các yêu cầucủa họ, thậm chí khi chương trình đó đang trong một hoạt động cần nhiều thời giannhư tổ chức trang lại cho một tài liệu dài hay là đang chờ một thao tác mang hoàn tất.Những chương trình đáp ứng chậm chạp yêu cầu của người sử dụng chúng thườngtrưng ra một sự thực hiện tồi Một cách để có thể đáp ứng được nhu cầu đó là sử dụngnhiều tuyến đoạn ( multithreading)
Mutithreading giúp ích nhiều cho một chương trình:
đáp ứng được yêu cầu của người sử dụng trong khi phải thực hiện các thao tác khácnhư tổ chức lại trang hay in một tài liệu
những chương trình giống hệt nhưng không sử dụng đa tuyến đoạn Điều này đặc biệtđúng trong việc chạy nhiều tuyến đoạn trên một máy có nhiều bộ xử lý, ở đó mỗituyến đoạn có bộ xử lý riêng
dùng, ngoài ra nó còn có giao diện thân thiện hơn
Java thực hiện tuyến đoạn thông qua lớp java.lang.Thread
IV.3.1 Thiết lập tuyến đoạn thừa kế từ lớp Thread:
Lớp java.lang.Thread cung cấp các phương thức để khởi động (start()), tạm dừng(suspend()), phục hồi (resume()) và dừng hẳn (stop()) một tuyến đoạn, cũng như kiểmsoát các khía cạnh khác như độ ưu tiên của tuyến đoạn hoặc tên của tuyến đoạn gắnvới nó Cách đơn giản nhất để sử dụng lớp Thread là thừa kế lớp này và nạp chồngphương thức run(), phương thức này được gọi khi tuyến đoạn được khởi động lần đầu.Bằng cách nạp chồng phương thức run(), một tuyến đoạn có thể thực hiện một số tác
vụ hữu ích ở hậu trường
Chú ý: Cần nhớ rằng các tuyến đoạn không chạy tự động tại thời điểm chạy Thayvào đó, ta phải gọi phương thức Thread.start(), nếu không tuyến đoạn sẽ không chạy.Khuôn dạng chung để tạo một ứng dụng đa tuyến đoạn bằng cách sử dụng lớpThread:
class C extends Thread
{
Trang 27public void run() {
// tìm các số nguyên tố lớn hơn một giá trị đã được khởi đầu
Ví dụ: Đoạn mã sau sẽ tạo một tuyến đoạn và khởi động nó chạy
PrimeThread p = new PrimeThread(143);
p.start();
IV.3.2 Thiết lập tuyến đoạn với lớp giao diện Runnable:
Thừa kế lớp Thread là một cách để tạo ra ứng dụng đa tuyến đoạn nhưng nó khôngphải là giải pháp tốt nhất Chúng ta đều biết rằng Java chỉ hỗ trợ đơn thừa kế nên việccài đặt các ứng dụng đa thừa kế là không thể được nếu tạo ứng dụng đa tuyến đoạnbằng cách thừa kế từ lớp Thread Một giải pháp có thể khắc phục điều này là thực thigiao tiếp java.lang.Runnable
Giao tiếp Runnable định nghĩa duy nhất một phương thức run() Các lớp thực thigiao tiếp này chỉ ra rằng chúng có thể chạy độc lập như một tuyến đoạn riêng Giaotiếp này không định nghĩa bất kỳ phương thức nào khác hoặc cung cấp bất kỳ chứcnăng tuyến đoạn cụ thể nào Mục đích duy nhất của nó là báo hiệu các lớp thực thigiao tiếp này có thể chạy như các tuyến đoạn Khi một đối tượng thực thi giao tiếpRunnable được truyền cho constructor của một tuyến đoạn, và các phương thức start()của tuyến đoạn được gọi, phương thức run() sẽ tự động được gọi bởi tuyến đoạn vừađược tạo ra Khi phương thức run() kết thúc xử lý, tuyến đoạn sẽ dừng hoạt động
Trang 28Việc sử dụng giao tiếp Runnable có một số ưu điểm so với thừa kế lớp Thread.Trước hết, lớp thực thi giao tiếp Runnable có thể tự do thừa kế từ một lớp khác Thứhai, cùng một đối tượng Runnable có thể được truyền cho nhiều tuyến đoạn, vì vậymột số tuyến đoạn tương tranh có thể sử dụng chung mã và thao tác trên cùng dữ liệu.Khuôn dạng chung để tạo một ứng dụng đa tuyến đoạn bằng cách thực thi giao tiếpRunnable:
class C() implements Runnable
{
public C(){Thread t = new Thread(this);}
public void run(){ }
public void run() {
// compute primes larger than minPrime
Ví dụ : Đoạn mã sau sẽ tạo một tuyến đoạn và khởi động nó chạy
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
Trang 29IV.4 Thứ tự ưu tiên tuyến đoạn
Hầu hết các máy tính chỉ có một CPU, vì thế các tuyến đoạn phải chia sẽ CPU vớicác tuyến đoạn khác Sự thực thi của nhiều tuyến đoạn trên một CPU đơn, theo mộtthứ tự nào đó, được gọi là sự lập danh mục (sheduling)
Trong Java, mỗi tuyến đoạn đều có một thứ tự ưu tiên trong danh sách truy cập ưutiên đến các tài nguyên của hệ điều hành Thứ tự ưu tiên của mỗi đối tượng tuyến đoạnđược định lượng bởi một giá trị nguyên từ 1-10, 5 là giá trị mặc định nếu bạn khôngđăng kí độ ưu tiên cho đối tượng tuyến đoạn
Một tuyến đoạn đều có thể nhường quyền ưu tiên của chúng bằng phương thứcyield() bất cứ khi nào Các tuyến đoạn chỉ có thể nhường CPU cho các tuyến đoạnkhác có độ ưu tiên giống nó, cố gắng nhường cho một tuyến đoạn có độ ưu tiên thấphơn sẽ bị lờ đi
Khi tất cả các tuyến đoạn có thể chạy trong hệ thống có cùng độ ưu tiên, bộ lậpbiểu sẽ chọn tuyến đoạn kế tiếp để chạy trong một thứ tự danh mục luân phiên, không
ưu tiên và bình đẳng
Chúng ta có thể thay đổi thứ tự ưu tiên của một tuyến đoạn bằng cách sử dụngphương thức setPriority() hoặc xác định thứ tự ưu tiên của một tuyến đoạn bởi phươngthức getPriority()
Lớp Thread chứa 3 hằng:
Ví dụ : Đặt thứ tự ưu tiên cho showA và show B( là hai đối tượng của môt lớpShowThread được dẫn xuất từ lớp Thread )
showB.setPriority(Thread.MIN_PRIORITY)
showA.setPriority(Thread.MAX_PRIORITY)
Khi chạy chương trình Java, tuyến đoạn được phép chạy có độ ưu tiên cao nhất sẽchạy đầu tiên Nếu nhiều tuyến đoạn có độ ưu tiên giống nhau, chúng sẽ chạy trong sựluân phiên Tuyến đoạn có độ ưu tiên thấp hơn chỉ có thể chạy khi tuyến đoạn có độ
ưu tiên cao hơn là không hoạt động (ví dụ như là khi chúng đã kết thúc, đã tạm hoãnhoặc đang ngủ)
Nói chung, khi một tuyến đoạn ThreadA có độ ưu tiên cao hơn tuyến đoạnThreadB, ThreadA sẽ là đang chạy và tuyến đoạn ThreadB sẽ phải đợi Tuy vậy thỉnhthoảng Java sẽ chọn để chạy ThreadB để tránh tình trạng " chết đói" Tình trạng nàyxảy ra khi một tuyến đoạn không thể thực hiện bất cứ hoạt động nào bởi độ ưu tiêncủa các tuyến đoạn khác
Trang 30IV.5 Cơ chế đồng bộ hóa
Khi hai hay nhiều hơn các Thread chia sẽ cùng tài nguyên, nó cần chắc chắn là tạimột thời điểm tài nguyên chỉ có một Thread sử dụng Quá trình này được gọi là sựđồng bộ hóa ( Synchronization)
Các Thread được đồng bộ hoá trong Java sử dụng thông qua một monitor Mộtmonitor là một object cho phép một Thread truy cập vào một tài nguyên Chỉ có mộtThread sử dụng một monitor vào bất kỳ một khoảng thời gian nào Các lập trình viênnói rằng: các Thread sở hữu monitor vào thời gian đó Monitor cũng được gọi là mộtsemaphore
Một Thread có thể sở hữu một monitor chỉ nếu như Thread khác không sở hữumonitor Nếu monitor có sẵn, một thread có thể sở hữu monitor và truy cập thẳng đếntài nguyên được tập hợp với monitor đó Nếu monitor không có sẵn, Thread sẽ bịsuspend cho đến khi monitor trở thành có sẵn( thread đang chờ monitor )
Phải đồng bộ hoá các Thread trong chương trình nếu như có nhiều hơn một Thread
sử dụng cùng một tài nguyên
Có hai cách để đồng bộ hoá các Thread: sử dụng phương thức được đồng bộ hóahoặc phát biểu được đồng bộ hóa:
monitor Một thread có một monitor bất kỳ khi nào một method được bổ sung từ khóasynchronized được gọi Thread lần đầu tiên gọi method được đồng bộ hóa được nóinằm bên trong method và sở hữu method đó cũng như tài nguyên sử dụng bởi method.Các thread khác gọi method được đồng bộ hoá chờ cho đến khi thread đầu tiên giảiphóng method được đồng bộ hóa Nếu method được đồng bộ hoá là một instancemethod, method được đồng bộ hóa kích hoạt khóa đi kèm với instance được gọi làmethod được đồng bộ hóa đó chính là object được biết là this trong suốt quá trình thựcthi toàn bộ method Nếu method được đồng bộ hóa là static thì nó kích hoạt khóa đikèm với class định nghĩa method được đồng bộ hoá
synchronized là sử dụng phát biểu được đồng bộ hóa Một phát biểu được đồng bộ hóachứa một block được đồng bộ hóa, mà bên trong đó đặt những đối tượng và nhữngmethod được đồng bộ hóa Gọi các method chứa block được đồng bộ hóa xảy ra khimột thread có được monitor của đối tượng Một cách khác để sử dụng từ khóasynchronized là sử dụng phát biểu được đồng bộ hóa Một phát biểu được đồng bộ hóachứa một block được đồng bộ hóa, mà bên trong đó đặt những đối tượng và nhữngmethod được đồng bộ hóa Gọi các method chứa block được đồng bộ hóa xảy ra khimột thread có được monitor của đối tượng
- Từ khóa synchronized: Lệnh synchronized cho phép đồng bộ hóa một đốitượng mà không cần yêu cầu bạn tác động một phương thức synchronized trên đối
tượng đó.Cú pháp: synchronized (expr)statement Khi có được khóa, statement được
xử lý giống như nó là một phương thức synchronized trên đối tượng đó
Trang 31- Giao tiếp giữa các Thread: Các thread mở ra cho các lập trình viên một khoảngkhông mới trong lập trình, nơi mà ở đó những phần của một chương trình thực thikhông đồng bộ với nhau, mỗi một xử lý độc lập với những xử lý khác Tuy nhiên mỗithread thỉnh thoảng cần tính toán việc xử lý của chúng và vì thế cần có thể giao tiếpvới những thread khác trong suốt quá trình xử lý Các lập trình viên gọi đây là inter-process communication (giao tiếp trong xử lý) Bạn có thể có các thread giao tiếp vớicác thread khác trong chương trình của bạn bằng cách sử dụng những method wait(),notify() và notifyAll() Những method này được gọi từ bên trong một method đượcđồng bộ hóa Method wait() nói cho một thread giải phóng monitor và đi vào trạngthái suspend Có hai dạng method wait() khác nhau Một dạng không yêu cầu đối số
và vì thế một thread sẽ chờ cho đến khi nó được thông báo Một dạng khác có đối số
để bạn xác định khoảng thời gian chờ Bạn xác định độ dài thời gian trong mili giây vàđặt nó vào trong method wait() Method notify() nói cho một thread đang suspend bởimethod wait() và lấy lại điều khiển của monitor Method notifyAll() đánh thức tất cảcác thread đang chờ điều khiển của monitor Những thread khác chờ trong trạng tháisuspend cho đến khi monitor có sẵn trở lại
- Sự đình trệ: Deadlock là trường hợp khi hai hay nhiều tiến trình chờ đợi lẫnnhau để giải phóng tài nguyên ,hoặc chờ đợi lẫn nhau để sử dụng tài nguyên theo vòngtròn Deadlock là trường hợp thường gặp trong multiprocessing, trong môi trường mànhiều tiến trình chia sẻ tài nguyên, ví dụ như phần mềm Ví dụ: Giả sử một tiến trìnhvào monitor của đối tượng X và một Thread khác vào monitor của đối tượng Y Nếuthread trong đối tượng X gọi phương thức đồng bộ trên đối tượng Y nó sẽ nằm trongkhối chờ đợi Tuy nhiên, nếu thread trong đối tượng Y quay trở lại gọi phương thứcđồng bộ trong X, nó sẽ chờ mãi mãi vì nó truy cập vào X mà lẽ ra nó phải được giảiphóng trên Y, vì thế thread đầu tiên phải được hoàn thành Deadlock xảy ra do cácnguyên nhân sau: Nó hiếm khi xuất hiện khi 2 thread phân chia thời gian trong cùngmức độ và nó liên quan đến nhiều hơn 2 thread và hai đối tượng đồng bộ
Trang 32V.Giới thiệu chung về ASP.NET
Net Phatform bao gồm Net Framework và những công cụ được dùng để xây
dựng, phát triển ứng dụng và dịch vụ ASP.Net
Hình 6 Các loại hình dịch vụ
Những sản phẩm công nghệ Net của Microsoft bao gồm: MSN.Net, Office.Net,Visual Studio.Net và Windows Server 2003 được biết đến với tên gọi Windows NetServer
Visual Studio Net là bộ phần mềm được dùng để xây dựng và phát triển các ứngdụng bao gồm các ngôn ngữ lập trình: C++.Net, Visual Basic.Net, ASP.Net, C# và J#.Tất cả các ngôn ngữ này được xây dựng dựa trên nền Net Framework, vì thế, bạn sẽnhận thấy cú pháp cơ bản của những ngôn ngữ này tương tự nhau
Trang 33V.2 Tìm hiểu về Net Framework
Hình 7: Kiến trúc Net Framework
V.2.1 Hệ Điều Hành
Cung cấp các chức năng xây dựng ứng dụng
Với vai trò quản lý việc xây dựng và thi hành ứng dụng, NET Framework cung cấpcác lớp đối tượng (Class) để bạn có thể gọi thi hành các chức năng mà đối tượng đócung cấp Tuy nhiên, lời kêu gọi của bạn có được "hưởng ứng" hay không còn tùythuộc vào khả năng của hệ điều hành đang chạy ứng dụng của bạn
Các chức năng đơn giản như hiển thị một hộp thông báo (Messagebox) sẽđược NET Framework sử dụng các hàm API của Windows Chức năng phức tạp hơnnhư sử dụng các COMponent sẽ yêu cầu Windows phải cài đặt Microsoft TransactionServer (MTS) hay các chức năng trên Web cần Windows phải cài đặt InternetInformation Server (IIS)
Như vậy, bạn cần biết rằng lựa chọn một hệ điều hành để cài đặt và sử dụng NETFramework cũng không kém phần quan trọng Cài đặt NET Framework trên các hệđiều hành Windows 2000, 2000 Server, XP, XP.NET, 2003 Server sẽ đơn giản và tiệndụng hơn trong khi lập trình
Trang 34V.2.2 Hệ Common Language Runtime
Là thành phần "kết nối" giữa các phần khác trong NET Framework với hệ điềuhành Common Language Runtime (CLR) giữ vai trò quản lý việc thi hành các ứngdụng viết bằng NET trên Windows CLR sẽ thông dịch các lời gọi từ chương trìnhcho Windows thi hành, đảm bảo ứng dụng không chiếm dụng và sử dụng tràn lan tàinguyên của hệ thống Nó cũng không cho phép các lệnh "nguy hiểm" được thi hành.Các chức năng này được thực thi bởi các thành phần bên trong CLR như Class loader,Just In Time compiler, Garbage collector, Exception handler, COM marshaller,Security engine,…
Trong các phiên bản hệ điều hành Windows mới như XP.NET và Windows 2003,CLR được gắn kèm với hệ điều hành Điều này đảm bảo ứng dụng viết ra trên máytính của chúng ta sẽ chạy trên máy tính khác mà không cần cài đặt, các bước thực hiệnchỉ đơn giản là một lệnh xcopy của DOS
V.2.3 Bộ thư viện các lớp đối tượng
Nếu phải giải nghĩa từ "Framework" trong thuật ngữ NET Framework thì đây làlúc thích hợp nhất Framework chính là một tập hợp hay thư viện các lớp đối tượng hỗtrợ người lập trình khi xây dựng ứng dụng Có thể một số người trong chúng ta đãnghe qua về MFC và JFC Microsoft Foundation Class là bộ thư viện mà lập trìnhviên Visual C++ sử dụng trong khi Java Foundation Class là bộ thư viện dành cho cáclập trình viên Java Giờ đây, có thể coi NET Framework là bộ thư viện dành cho cáclập trình viên NET
Với hơn 5000 lớp đối tượng để gọi thực hiện đủ các loại dịch vụ từ hệ điều hành,chúng ta có thể bắt đầu xây dựng ứng dụng bằng Notepad.exe… Nhiều người lầmtưởng rằng các môi trường phát triển phần mềm như Visual Studio 98 hay VisualStudio.NET là tất cả những gì cần để viết chương trình Thực ra, chúng là những phầnmềm dùng làm "vỏ bọc" bên ngoài Với chúng, chúng ta sẽ viết được các đoạn lệnh đủcác màu xanh, đỏ; lỗi cú pháp báo ngay khi đang gõ lệnh; thuộc tính của các đối tượngđược đặt ngay trên cửa sổ properties, giao diện được thiết kế theo phong cách trựcquan… Như vậy, chúng ta có thể hình dung được tầm quan trọng của .NETFramework Nếu không có cái cốt lõi NET Framework, Visual Studio.NET cũng chỉ
là cái vỏ bọc Nhưng nếu không có Visual Studio.NET, công việc của lập trìnhviên NET cũng lắm bước gian nan
1 Base class library – thư viện các lớp cơ sở
Đây là thư viện các lớp cơ bản nhất, được dùng trong khi lập trình hay bản thânnhững người xây dựng NET Framework cũng phải dùng nó để xây dựng các lớp caohơn Ví dụ các lớp trong thư viện này là String, Integer, Exception,…
2 ADO.NET và XML
Bộ thư viện này gồm các lớp dùng để xử lý dữ liệu ADO.NET thay thế ADO đểtrong việc thao tác với các dữ liệu thông thường Các lớp đối tượng XML được cung
Trang 35cấp để bạn xử lý các dữ liệu theo định dạng mới: XML Các ví dụ cho bộ thư viện này
là SqlDataAdapter, SqlCommand, DataSet, XMLReader, XMLWriter,…
3 ASP.NET
Bộ thư viện các lớp đối tượng dùng trong việc xây dựng các ứng dụng Web.ASP.NET không phải là phiên bản mới của ASP 3.0 Ứng dụng web xây dựng bằngASP.NET tận dụng được toàn bộ khả năng của NET Framework Bên cạnh đó là một
"phong cách" lập trình mới mà Microsoft đặt cho nó một tên gọi rất kêu: code behind.Đây là cách mà lập trình viên xây dựng các ứng dụng Windows based thường sử dụng– giao diện và lệnh được tách riêng Tuy nhiên, nếu bạn đã từng quen với việc lậptrình ứng dụng web, đây đúng là một sự "đổi đời" vì bạn đã được giải phóng khỏi mớlệnh HTML lộn xộn tới hoa cả mắt
Sự xuất hiện của ASP.NET làm cân xứng giữa quá trình xây dựng ứng dụng trênWindows và Web ASP.NET cung cấp một bộ các Server Control để lập trình viên bắt
sự kiện và xử lý dữ liệu của ứng dụng như đang làm việc với ứng dụng Windows Nócũng cho phép chúng ta chuyển một ứng dụng trước đây viết chỉ để chạy trênWindows thành một ứng dụng Web khá dễ dàng Ví dụ cho các lớp trong thư viện này
là WebControl, HTMLControl, …
4 Web services
Web services có thể hiểu khá sát nghĩa là các dịch vụ được cung cấp qua Web (hayInternet) Dịch vụ được coi là Web service không nhằm vào người dùng mà nhằm vàongười xây dựng phần mềm Web service có thể dùng để cung cấp các dữ liệu hay mộtchức năng tính toán
Ví dụ, công ty du lịch của bạn đang sử dụng một hệ thống phần mềm để ghi nhậnthông tin về khách du lịch đăng ký đi các tour Để thực hiện việc đặt phòng khách sạntại địa điểm du lịch, công ty cần biết thông tin về phòng trống tại các khách sạn.Khách sạn có thể cung cấp một Web service để cho biết thông tin về các phòng trốngtại một thời điểm Dựa vào đó, phần mềm của bạn sẽ biết rằng liệu có đủ chỗ để đặtphòng cho khách du lịch không? Nếu đủ, phần mềm lại có thể dùng một Web servicekhác cung cấp chức năng đặt phòng để thuê khách sạn Điểm lợi của Web service ởđây là bạn không cần một người làm việc liên lạc với khách sạn để hỏi thông tinphòng, sau đó, với đủ các thông tin về nhiều loại phòng người đó sẽ xác định loạiphòng nào cần đặt, số lượng đặt bao nhiêu, đủ hay không đủ rồi lại liên lạc lại vớikhách sạn để đặt phòng Đừng quên là khách sạn lúc này cũng cần có người để làmviệc với nhân viên của bạn và chưa chắc họ có thể liên lạc thành công
Web service được cung cấp dựa vào ASP.NET và sự hỗ trợ từ phía hệ điều hànhcủa Internet Information Server
5 Window form
Bộ thư viện về Window form gồm các lớp đối tượng dành cho việc xây dựng cácứng dụng Windows based Việc xây dựng ứng dụng loại này vẫn được hỗ trợ tốt từtrước tới nay bởi các công cụ và ngôn ngữ lập trình của Microsoft Giờ đây, ứng dụng
Trang 36chỉ chạy trên Windows sẽ có thể làm việc với ứng dụng Web dựa vào Web service Ví
dụ về các lớp trong thư viện này là: Form, UserControl,…
V.2.4 Phân nhóm các lớp đối tượng theo loại
Một khái niệm không được thể hiện trong hình vẽ trên nhưng cần đề cập đến làNamespace Đây là tên gọi một nhóm các lớp đối tượng phục vụ cho một mục đíchnào đó Chẳng hạn, các lớp đối tượng xử lý dữ liệu sẽ đặt trong một namespace tên làData Các lớp đối tượng dành cho việc vẽ hay hiển thị chữ đặt trong namespace tên làDrawing
Một namespace có thể là con của một namespace lớn hơn Namespace lớn nhấttrong NET Framework là System
Hình 8: Hệ thống tên miền (Namespace)
Lợi điểm của namespace là phân nhóm các lớp đối tượng, giúp người dùng dễ nhậnbiết và sử dụng Ngoài ra, namespace tránh việc các lớp đối tượng có tên trùng vớinhau không sử dụng được .NET Framework cho phép chúng ta tạo ra các lớp đốitượng và các namespace của riêng mình Với hơn 5000 tên có sẵn, việc đặt trùng tênlớp của mình với một lớp đối tượng đã có là điều khó tránh khỏi Namespace cho phépviệc này xảy ra bằng cách sử dụng một tên đầy đủ để nói đến một lớp đối tượng Ví
dụ, nếu muốn dùng lớp WebControls, chúng ta có thể dùng tên tắt của nó làWebControls hay tên đầy đủ là System.Web.UI.WebControls
Đặc điểm của bộ thư viện các đối tượng NET Framework là sự trải rộng để hỗ trợtất cả các ngôn ngữ lập trình NET như chúng ta thấy ở hình vẽ trên Điều này sẽ giúpnhững người mới bắt đầu ít bận tâm hơn trong việc lựa chọn ngôn ngữ lập trình chomình vì tất cả các ngôn ngữ đều mạnh ngang nhau Cũng bằng cách sử dụng các lớpđối tượng để xây dựng ứng dụng, NET Framework buộc người lập trình phải sử dụng
kỹ thuật lập trình hướng đối tượng
Trang 37V.3 Tìm hiểu về ASP.Net
Từ khoảng cuối thập niên 90, ASP (Active Server Page) đã được nhiều lập trìnhviên lựa chọn để xây dựng và phát triển ứng dụng web động trên máy chủ sử dụng hệđiều hành Windows ASP đã thể hiện được những ưu điểm của mình với mô hình lậptrình thủ tục đơn giản, sử dụng hiệu quả các đối tượng COM: ADO (ActiveX DataObject) - xử lý dữ liệu, FSO (File System Object) - làm việc với hệ thống tập tin…,đồng thời, ASP cũng hỗ trợ nhiều ngôn ngữ: VBScript, JavaScript Chính những ưuđiểm đó, ASP đã được yêu thích trong một thời gian dài
Tuy nhiên, ASP vẫn còn tồn đọng một số khó khăn như Code ASP và HTML lẫnlộn, điều này làm cho quá trình viết code khó khăn, thể hiện và trình bày code khôngtrong sáng, hạn chế khả năng sử dụng lại code Bên cạnh đó, khi triển khai cài đặt, dokhông được biên dịch trước nên dễ bị mất source code Thêm vào đó, ASP không có
hỗ trợ cache, không được biên dịch trước nên phần nào hạn chế về mặt tốc độ thựchiện Quá trình xử lý Postback khó khăn, …
Đầu năm 2002, Microsoft giới thiệu một kỹ thuật lập trình Web khá mới mẻ với têngọi ban đầu là ASP+, tên chính thức sau này là ASP.Net Với ASP.Net, không nhữngkhông cần đòi hỏi bạn phải biết các tag HTML, thiết kế web, mà nó còn hỗ trợ mạnhlập trình hướng đối tượng trong quá trình xây dựng và phát triển ứng dụng Web.ASP.Net là kỹ thuật lập trình và phát triển ứng dụng web ở phía Server (Server-side) dựa trên nền tảng của Microsoft Net Framework
Hầu hết, những người mới đến với lập trình web đều bắt đầu tìm hiểu những kỹthuật ở phía Client (Client-side) như: HTML, Java Script, CSS (Cascading StyleSheets) Khi Web browser yêu cầu một trang web (trang web sử dụng kỹ thuật client-side), Web server tìm trang web mà Client yêu cầu, sau đó gởi về cho Client Clientnhận kết quả trả về từ Server và hiển thị lên màn hình
ASP.Net sử dụng kỹ thuật lập trình ở phía server thì hoàn toàn khác, mã lệnh ở phíaserver (ví dụ: mã lệnh trong trang ASP) sẽ được biên dịch và thi hành tại Web Server.Sau khi được Server đọc, biên dịch và thi hành, kết quả tự động được chuyển sangHTML/JavaScript/CSS và trả về cho Client Tất cả các xử lý lệnh ASP.Net đều đượcthực hiện tại Server và do đó, gọi là kỹ thuật lập trình ở phía server
Trang 38V.4 Quá trình xử lý tập tin ASPX
Khi Web server nhận được yêu cầu từ phía client, nó sẽ tìm kiếm tập tin được yêucầu thông qua chuỗi URL được gởi về, sau đó, tiến hành xử lý theo sơ đồ sau:
Hình 9: Quá trình xử lý tập tin ASPX
Trang 39V.5 Phân loại tập tin trong ASP.Net
global.asa của ASP, là tập tin quản lý các sự kiện củaứng dụng (application), session, và các sự kiện khi cócác yêu cầu tới trang web
phần mở rộng là ascx
Web.config chứa hầu hết các cấu hình của ứng dụng
Bảng 1: Phân loại tập tin trong ASP.NET
ASP.Net cho phép bạn lựa chọn một trong các ngôn ngữ lập trình mà bạn yêu thích:Visual Basic.Net, J#, C#,…
Trang ASP.Net được biên dịch trước Thay vì phải đọc và thông dịch mỗi khi trangweb được yêu cầu, ASP.Net biên dịch những trang web động thành những tập tinDLL mà Server có thể thi hành nhanh chóng và hiệu quả Yếu tố này là một bướcnhảy vọt đáng kể so với kỹ thuật thông dịch của ASP
Trang 40Hình 10: Cơ chế hoạt động của ASP.Net
ASP.Net hỗ trợ mạnh mẽ bộ thư viện phong phú và đa dạng của Net Framework,làm việc với XML, Web Service, truy cập cơ sở dữ liệu qua ADO.Net, …
ASPX và ASP có thể cùng hoạt động trong 1 ứng dụng
ASP.Net sử dụng phong cách lập trình mới: Code behide Tách code riêng, giaodiện riêng è Dễ đọc, dễ quản lý và bảo trì
Kiến trúc lập trình giống ứng dụng trên Windows
Hỗ trợ quản lý trạng thái của các control
Tự động phát sinh mã HTML cho các Server control tương ứng với từng loạiBrowser
Hỗ trợ nhiều cơ chế cache
Triển khai cài đặt:
Hỗ trợ quản lý ứng dụng ở mức toàn cục
- Quản lý session trên nhiều Server, không cần Cookies
Kết luận : ASP.NET có nhiều ưu điểm hơn các nền tảng khác khi dùng nó để tạo
ứng dụng Web Có thể phần lớn những ưu điểm quan trọng của nó đi kèm với các máychủ Windows và các công cụ lập trình Windows Ứng dụng web được tạo bởiASP.NET được tạo ra, bắt lỗi và triển khai rất dễ dàng thông qua các tác vụ có thểthực thi trọn vẹn trong một môi trường phát triển duy nhất – Visual Studio NET.Chính vì vậy việc lựa chọn ASP.NET với mong muốn hỗ trợ những tính năng cầnthiết trong việc xây dựng hệ thống chia sẻ multimedia là rất thiết thực