intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Luận văn: Tìm hiểu cơ chế hoạt động của Socket và Thread trong .NET Framwork từ đó viết ứng dụng Chat trong mạng Lan

Chia sẻ: Gacon | Ngày: | Loại File: DOC | Số trang:77

353
lượt xem
123
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Hiện nay, mạng Lan đã có những tiến bộ vượt bậc và ngày càng phổ biến hơn trong đồi sống sinh hoat. Điều này làm cho nhu cầu liên lạc và trao đổi thông tin thông qua mạng Lan ngày càng lớn hơn. Chính vì vậy, chương trình Chat trên mạng Lan được xây dựng để đáp ứng phần nào những nhu cầu cấp thiết đó.

Chủ đề:
Lưu

Nội dung Text: Luận văn: Tìm hiểu cơ chế hoạt động của Socket và Thread trong .NET Framwork từ đó viết ứng dụng Chat trong mạng Lan

  1.  Luận văn Tìm hiểu cơ chế hoạt động của Socket và Thread trong .NET Framwork từ đó viết ứng dụng Chat trong mạng Lan Trang 1
  2. Lời cảm ơn Em xin chân thành cảm ơn đến thầy Trần Phước Tuấn đã tận tình hướng dẫn em trong thời gian thực hiện đồ án này. Em xin chân thành cảm ơn Khoa Toán – Tin học đã tạo điều kiện cho em thực hiện tốt đồ án này. Xin chân thành cảm ơn các b ạn đã tận tình giúp đ ỡ để mình có thể thực hiện tốt đồ án này. TpHCM, ngày 7 tháng 5 năm 2009 Sinh viên Nguyễn Ngọc Duy Tuệ Trang 2
  3. MỤC LỤC Lời cảm ơn .............................................................................................................. 1 MỤC LỤC................................ ............................................................................... 3 DANH SÁCH CÁC HÌNH VẼ ................................ ................................................ 6 DANH SÁCH CÁC BẢNG BIỄU ................................................................ ........... 7 Chương 1: Mở đầu ................................ ................................ ............................. 8 Lý do chọn đề tài: ................................ ................................ ....................... 8 1 .1 Mục đích của đề tài: ................................................................................... 8 1 .2 Đối tượn g và phạm vi nghiên cứu ............................................................... 8 1 .3 Đối tượng nghiên cứu ................................ .......................................... 8 1 .3.1 Phạm vi nghiên cứu ............................................................................. 8 1 .3.2 Chương 2: KIẾN THỨC ỨNG DỤNG ................................ .............................. 9 Sơ lược về lập trình Socket: ........................................................................ 9 2 .1 Khái niệm Địa chỉ và cổng (Address & Port) ....................................... 9 2 .1.1 Lớp IPAddress ..................................................................................... 9 2 .1.2 Lớp IPEndpoint ................................................................................. 12 2 .1.3 Lớp UDP ................................ ................................ ........................... 13 2 .1.4 Lớp TCP (TCPClient) ................................ ........................................ 15 2 .1.5 Lớp TcpListener ................................................................................ 17 2 .1.6 Sơ lược về lập trình đa luồng: ................................................................ ... 18 2 .2 Khái niệm Luồng (Thread)................................................................. 18 2 .2.1 Kh ảo sát namespace System.Threading.............................................. 19 2 .2.2 Lớp Thread.................................................................................. 20 2 .2.2.1 Thao tác với luồng....................................................................... 22 2 .2.2.2 Đồng bộ hóa (Synchron ization) trong lập trình đ a luồng: ................... 24 2 .2.3 Đồng bộ hóa ................................................................................ 24 2 .2.3.1 2 .2.3.2 Deadlock ................................ ................................ ..................... 30 2 .2.3.3 Race condition............................................................................. 32 Chương 3: PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH ................................ .. 35 Trang 3
  4. 3 .1 Phân tích ................................................................ ................................ .. 35 Phân tích nhu cầu thực tiễn: ............................................................... 35 3 .1.1 Yêu cầu đề ra: ................................ .................................................... 35 3 .1.2 Mô hình dữ liệu ở mức quan niệm: .................................................... 36 3 .1.3 Phân tích các thành phần xữ lý:.......................................................... 37 3 .1.4 Mô hình luồng xử lý đăng nhập ................................................... 37 3 .1.4.1 Mô hình luồng xử lý gởi tin nhắn ................................................ 39 3 .1.4.2 Mô hình luồng xử lý FriendList ................................................... 41 3 .1.4.3 Mô hình luồng xử lý Group Chat ................................................. 43 3 .1.4.4 Thiết kế các lớp xữ lý ................................................................ ............... 48 3 .2 Lớp DataLayer: .................................................................................. 48 3 .2.1 Lớp MyDatabase: ................................ .............................................. 49 3 .2.2 Lớp ImageListBoxItem ...................................................................... 50 3 .2.3 Lớp ImageListBox: ............................................................................ 51 3 .2.4 Lớp Settings:...................................................................................... 52 3 .2.5 Lớp MultilineListBoxItem: ................................................................ 53 3 .2.6 Lớp MultilineListBox: ....................................................................... 53 3 .2.7 Lớp TabControlEx: ............................................................................ 54 3 .2.8 LớpMyDataPack: ................................................................ ............... 55 3 .2.9 Lớp ClientHandler: ................................................................ ......... 56 3 .2.10 Một số qui tắc và hàm xử lý cơ bản .......................................................... 57 3 .3 Qui tắc gởi dữ liệu trong mạng:.......................................................... 57 3 .3.1 Một số hàm xữ lý cơ bản:................................................................ ... 58 3 .3.2 3 .3.2.1 Hàm PackData............................................................................. 58 3 .3.2.2 Hàm UnPackData ................................ ........................................ 59 3 .3.2.3 Hàm SaveSettings và LoadSettings ............................................. 61 3 .3.2.4 Hàm theadListen ................................................................ ......... 62 Thiết kế dữ liệu ........................................................................................ 63 3 .4 Chuẩn hóa dữ liệu: ............................................................................. 63 3 .4.1 Trang 4
  5. Mô hình dữ liệu ở mức vật lý: ................................ ............................ 63 3 .4.2 Thiết kế dữ liệu: ................................................................................. 63 3 .4.3 Mô tả các ràng buộc toàn vẹn:................................ ............................ 66 3 .4.4 Thiết kế giao diện ................................ ................................ ..................... 66 3 .5 Màn hình đ ăng nhập .......................................................................... 66 3 .5.1 3 .5.2 Màn hình chính .................................................................................. 67 3 .5.3 Màn hình thêm Friend ................................ ........................................ 67 3 .5.4 Màn hình xóa Friend .......................................................................... 68 3 .5.5 Màn hình Chat With .......................................................................... 68 3 .5.6 Màn hình Invite Group ....................................................................... 69 3 .5.7 Màn hình Invite Another .................................................................... 69 3 .5.8 Màn hình Settings ................................ .............................................. 70 Chương 4: CÀI ĐẶT – THỬ NGHIỆM ................................ ........................... 71 Cài đặt chương trình ................................................................................. 71 4 .1 Cài đ ặt Server ................................ .................................................... 71 4 .1.1 Cài đ ặt Client ................................ ................................ ..................... 74 4 .1.2 Hướng dẫn sử dụng .................................................................................. 76 4 .2 Chương 5: KẾT LUẬN ................................ .................................................... 77 Kết quả đạt được ...................................................................................... 77 5 .1 Hướng phát triển ...................................................................................... 77 5 .2 TÀI LIỆU THAM KHẢO ................................ ................................ ..................... 78 Trang 5
  6. DANH SÁCH CÁC HÌNH VẼ Hình 2-1: Kết quả ch ương trình không sử dụng đồng bộ hóa ................................. 28 Hình 2-2: Kết quả ch ương trình sử dụng đồng bộ hóa ............................................ 30 Hình 3-1: Mô hình dữ liệu ở mức quan niệm ......................................................... 36 Hình 3-2: Mô hình xử lý đăng nhập ....................................................................... 37 Hình 3-3: Mô hình xử lý đăng xuất ................................ ........................................ 38 Hình 3-4: Mô hình xử lý gởi tin nhắn Online ......................................................... 39 Hình 3-5: Mô hình xử lý gởi tin nhắn Offline ........................................................ 40 Hình 3-6: Mô hình xử lý thêm Friend .................................................................... 41 Hình 3-7: Mô hình xử lý xóa Friend ...................................................................... 42 Hình 3-8: Mô hình xử lý tạo Group ....................................................................... 43 Hình 3-9: Mô hình xử lý đồng ý gia nhập Group ................................................... 44 Hình 3-10: Mô hình xử lý thoát khỏi Group ................................ ........................... 45 Hình 3-11: Mô hình xử lý hủy Group .................................................................... 46 Hình 3-12: Mô hình xử lý gởi tin nhắn trong Group .............................................. 47 Hình 3-13: Mô hình lớp DataLayer ................................ ........................................ 48 Hình 3-14: Mô hình lớp MyDatabase .................................................................... 49 Hình 3-15: Mô hình lớp ImageListBoxItem ................................ ........................... 50 Hình 3-16: Mô hình lớp ImageListBox ................................ ................................ .. 51 Hình 3-17: Mô hình lớp Settings............................................................................ 52 Hình 3-18: Mô hình lớp MultilineListBoxItem ...................................................... 53 Hình 3-19: Mô hình lớp TabControlEx ................................ ................................ .. 54 Hình 3-20: Mô hình lớp MyDataPack .................................................................... 55 Hình 3-21: Mô hình ClientHandler ................................ ........................................ 56 Hình 3-22: Mô hình d ữ liệu ở mức vật lý ............................................................... 63 Hình 3-23: Màn hình đăng nhập ............................................................................ 66 Hình 3-24: Màn hình chính ................................ .................................................... 67 Hình 3-25: Màn hình thêm Friend ................................................................ ......... 67 Hình 3-26: Màn hình xóa Friend ............................................................................ 68 Hình 3-27: Màn hình Chat With ............................................................................ 68 Hình 3-28: Màn hình Invite Group ....................................................................... 69 Hình 3-29: Màn hình Invite Another...................................................................... 69 Hình 3-30: Màn hình Invite Another...................................................................... 70 Hình 4-1: Cài đặt Microsoft SQL Destop Engine ................................................... 71 Hình 4-2: Cài đặt Server – Màn hình Customer Information ................................ .. 72 Hình 4-3: Cài đặt Server – Màn hình Destination Folder ....................................... 73 Hình 4-4: Cài đặt Server – Màn hình SQL Login ................................................... 74 Hình 4-5: Cài đặt Server – Màn hình Finish................................ ........................... 74 Hình 4-6: Cài đặt Clien t – Màn hình Customer Information ................................ .. 75 Hình 4-7: Cài đặt Client – Màn hình Destination Folder ........................................ 75 Hình 4-8: Cài đặt Client – Màn hình Finish ................................ ........................... 76 Trang 6
  7. DANH SÁCH CÁC BẢNG BIỄU Bảng 2-1: Các thành phần của lớp IpAddress 10 Bảng 2-2: Các thành viên của lớp IpEndPoint 12 Bảng 2-3: Các thành viên của lớp UDPClient 14 Bảng 2-4: Các thành phần của lớp TcpClient 16 Bảng 2-5: Các thành phần của lớp TcpListener 17 Bảng 2-6: Một số lớp của namespace System.Threading 20 Bảng 2-7: Các thành phần static của lớp Thread 21 Bảng 2-8: Các thành viên cấp đối tượng của lớp Thread 21 Bảng 3-1: Mã nguồn h àm PackData 58 Bảng 3-2: Mã nguồn h àm UnPackData 59 Bảng 3-3: Mã nguồn hàm SaveSettings và LoadSettings 61 Bảng 3-4: Mã nguồn h àm theadListen 62 Bảng 3-5: Table Users 64 Bảng 3-6: Table FriendList 64 Bảng 3-7: Table OfflineMessage 65 Bảng 3-8: Table GroupChat 65 Bảng 3-9: Table GroupDetail 65 Trang 7
  8. Mở đầu Chương 1: 1.1 Lý do chọn đề tài: Hiện nay, mạng Lan đ ã có nh ững tiến bộ vượt bậc và ngày càng phổ biến h ơn trong đồi sống sinh hoat. Điều này làm cho nhu cầu liên lạc và trao đổi thông tin thông qua m ạng Lan ngày càng lớn hơn. Chính vì vậy, ch ương trình Chat trên m ạng Lan được xây dựng để đáp ứng phần nào những nhu cầu cấp thiết đó. 1.2 Mục đích của đề tài: Xây dựng chương trình Chat hoạt động trong m ạng Lan với các chức năng cơ b ản như: gởi tin nhắn, tạo một nhóm Chat và lưu thông tin bạn bè. 1.3 Đối tượng và phạm vi nghiên cứu 1 .3.1 Đối tượng nghiên cứu Tìm hiểu được cơ chế hoạt động của Socket và Thread trong .NET Framwork từ đó viết ứng dụng Chat trong mạng Lan. 1 .3.2 Phạm vi nghiên cứu Chương trình Chat được xây d ựng với khả năng Chat b ằng văn bản giữa các User, thành lập các nhóm Chat thông qua sự điều khiển của một Server trong m ạng Lan. Trang 8
  9. KIẾN THỨC ỨNG DỤNG Chương 2: 2.1 Sơ lược về lập trình Socket: 2 .1.1 Khái niệm Địa chỉ và cổng (Address & Port) Nguyên lý:  Trong một máy có rất nhiều ứng dụng muốn trao đối với các ứng dụng khác thông qua m ạng (ví dụ trên có 2 ứng dụng trong máy A muốn trao đổi với với 2 ứng dụng trên máy B).  Mỗi máy tính chỉ có duy nhất một đường truyền dữ liệu (để gửi và nh ận). Vấn đề : Rất có thể xảy ra "nhầm lẫn" khi dữ liệu từ máy A gửi đến máy B thì không biết là dữ liệu đó gửi cho ứng dụng nào trên máy B? Giải quyết: Mỗi ứng dụng trên máy B sẽ được gán một số hiệu (mà ta vẫn quen gọi là cổng Port), số hiệu cổng này từ 1..65535. Khi ứng dụng trên m áy A muốn gửi cho ứng dụng nào trên máy B thì chỉ việc điền thêm số hiệu cổng (vào trư ờng RemotePort) vào gói tin cần gửi. Trên máy B, các ứng dụng sẽ việc kiểm tra giá trị cổng trên mỗi gói tin xem có trùng với số hiệu cổng của mình (đã được gán – chính là giá trị Localport) hay không? Nếu b ằng th ì xử lý, còn trái lại thì không làm gì. Như vậy: Khi cần trao đổi dữ liệu cho nhau th ì hai ứng dụng cần phải biết thông tin tối thiểu là địa chỉ (Address) và số hiệu cổng (Port) của ứng dụng kia. 2 .1.2 Lớp IPAddress Trên Internet mỗi một trạm (có thể là máy tính, máy in, thiết bị …) đều có một định danh duy nhất, định danh đó th ường được gọi là một địa chỉ (Address). Địa chỉ trên Internet là một tập hợp gồm 4 con số có giá trị từ 0 -255 và cách nhau b ởi dấu chấm. Để thể hiện địa chỉ này, ngư ời ta có thể viết dưới các dạng sau: Tên : Ví dụ May01, Server, …. Trang 9
  10. Địa chỉ IP nh ưng đặt trong một xâu: "192.168.1.1", "127.0.0.1" Đặt trong một mảng 4 byte, mỗi byte chứ a một số từ 0 -255. Ví dụ để biểu d iễn địa chỉ 192.168.1.1 với khai báo “byte[] DiaChi = new byte[4];”, ta có th ể viết:  DiaChi(0) = 192 ;  DiaChi(1) = 168 ;  DiaChi(2) = 1;  DiaChi(3) = 1; Ho ặc cũng có thể là một số (long), có độ dài 4 byte. Ví dụ, với địa chỉ 192.168.1.1 ở trên thì giá trị đó sẽ là: 16885952 (đây là số ở hệ thập phân khi xếp liền 4 byte ở trên lại với nhau 00000001 00000001 10101000 11000000 1 (Byte 0) 1 168 192 (Byte 3) Như vậy, để đổi một địa chỉ chuẩn ra dạng số ta chỉ việc tính toán cho từng thành phần. Ví dụ: Đổi địa chỉ 192.168.1.2 ra số, ta tính như sau : 2 * 256 ^ 3 + 1* 256 ^ 2 + 168 * 256 ^ 1 + 192 * 256 ^ 0 Trong .NET, IPAddress là một lớp dùng đ ể mô tả địa chỉ này. Đây là lớp rất cơ bản được sử dụng khi chúng ta thao tác (truyền) vào các lớp như IPEndpoint, UDP, TCP, Socket … Bảng 2 -1: Các thành phần của lớp IpAddress Thành viên Static Mô tả Cung cấp một địa chỉ IP (thường là 0.0.0.0) để chỉ ra Any rằng Server phải lắng nghe các hoạt động của Client trên tất cả các Card m ạng (sử dụng khi xây dựng Server). Thuộc tính n ày ch ỉ đọc. Cung cấp một địa chỉ IP quảng bá (Broadcast, thường Broadcast là 255.255.255.255), ở dạng số long. Trả về một địa chỉ IP lặp (IP Loopback, ví dụ Loopback 127.0.0.1). Trả về họ địa chỉ của địa chỉ IP hiện hành. Nếu địa chỉ AddressFamily Trang 10
  11. ở dạng IPv4 thì kết quả là Internetwork, và InternetworkV6 nếu là đ ịa chỉ IPv6. Phương thức Mô tả Tạo địa chỉ IP từ một số long. IPAddress(Int64) Tạo địa chỉ IP từ một mảng Byte. IPAddress(Byte[]) Chuyển địa chỉ th ành m ảng Byte. GetAddressByte () Đảo thứ tự Byte của một số cho đún g với thứ tự Byte HostToNetworkOrder() trong địa chỉ IPAddress. Cho biết địa chỉ có phải là địa chỉ lặp hay không? IsLoopback() Ví dụ 1 : Kiểm tra xem 192.168.1.300 có phải là địa chỉ IP hợp lệ không private void KiemTra() { String Ip1 = "127.0.0.1"; String Ip2 = "999.0.0.1"; MessageBox.Show(IPAddress.TryParse(Ip1, new IPAddress(0))); MessageBox.Show (IPAddress.TryParse(Ip2, new IPAddress(1))); } Ví dụ 2: Chuyển địa ch ỉ hiện hành ra mảng byte và hiển thị từng thành sph ần trong mảng đó private void KiemTra() { IpAddress Ip3 = new IPAddress(16885952); Byte[] b; b = Ip3.GetAddressBytes(); MessageBox.Show("Address: " & b(0) &"." & b(1) &"." & b(2) & "." & b(3)); } Trang 11
  12. 2 .1.3 Lớp IPEndpoint Trong m ạng, để hai trạm có thể trao đổi thông tin được với nhau thì chúng cần phải biết đư ợc địa chỉ (IP) của nhau và số hiệu cổng mà hai bên dùng để trao đổi thông tin. Lớp IPAddress mới chỉ cung cấp cho ta một vế là địa chỉ IP (IPAddress), như vậy vẫn còn thiếu vế thứ hai là số hiệu cổng (Port number). Như vậy, lớp IPEndpoint chính là lớp chứa đựng cả IPAddress và Port number. Đối tượng IPEndpoint sẽ được dùng sau này để truyền trực tiếp cho các đối tượng UDP, TCP… Bảng 2 -2: Các thành viên của lớp IpEndPoint Phương thức khởi tạo Mô tả Tạo một đối tượng mới của lớp IPEndPoint, IPEndPoint(Int64, Int32) tham số truyền vào là địa chỉ IP (ở dạng số) và cổng sẽ dùng đ ể giao tiếp. Tạo một đối tượng mới của lớp IPEndPoint, IPEndPoint(IPAddress, Tham số truyền vào là một địa chỉ IPAddress và Int32) số hiệu cổng dùng để giao tiếp. Thuộc tính Mô tả Trả về hoặc thiết lập địa chỉ IP cho Endpoint (trả Address về một đối tượng IPAddress). Lấy về loại giao thức m à Endpoint này đang sử AddressFamily dụng. Lấy h oặc gán số hiệu cổng của Endpoint. Port Mô tả Phương thức Tạo một Endpoint từ một địa chỉ socket (socket Create() address). Trả về địa chỉ IP và số hiệu cổng theo khuôn ToString() d ạng địa chỉ: cổng. Ví dụ: “192.168.1.1:8080” Trang 12
  13. 2 .1.4 Lớp UDP 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. Trang 13
  14. Bảng 2 -3: Các thành viên của lớp UDPClient Mô tả Phương thức khởi tạo Tạo một đối tượng (thể hiện) mới của lớp UdpClient () UDPClient. Tạo một đối tượng (thể hiện) mới của lớp UdpClient (AddressFamily) Thuộc một dòng đ ịa chỉ UDPClient. (AddressFamily) được chỉ định. Tạo một UdpClient và gắn (bind) một cổng cho UdpClient (Int32) nó. Tạo một UdpClient và gắn (bind) một IPEndpoint UdpClient (IPEndPoint) (gán địa chỉ IP và cổng) cho nó. Tạo một UdpClient và gán số hiệu cổng, UdpClient(Int32, AddressFamily AddressFamily) Tạo một UdpClient và thiết lập với một trạm từ xa UdpClient(String, Int32) m ặc định. Mô tả Phương thức Nhận dữ liệu Không đồng bộ từ máy ở xa. BeginReceive() Gửi không đồng bộ dữ liệu tới máy ở xa BeginSend() Đóng kết nối. Close() Thiết lập một Default remote host. Connect() Kết thúc nhận dữ liệu không đồng bộ ở trên EndReceive() Kết thúc việc gửi dữ liệu không đồng bộ ở trên EndSend () Nhận dữ liệu (đồng bộ) do máy ở xa gửi. (Đồng bộ Receive (ref IPEndPoint) 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)) Gửi dữ liệu (đồng bộ) cho máy ở xa. Send() Trang 14
  15. 2 .1.5 Lớp TCP (TCPClient) Mục đích của lớp UDPClient ở trên là dùng cho lập trình với giao thức UDP, với 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 độ tin cậy không cao. Để đảm bảo độ tin cậy trong các ứng dụng mạng, người ta còn dùng một giao thức khác, gọi là giao thức có kết nối : TCP (Transport Control Protocol). Trên Internet chủ yếu là dùng loại giao thức này, ví dụ như Telnet, HTTP, SMTP, POP3… Để lập trình theo giao thức TCP, MS.NET cung cấp h ai lớp có tên là TCPClient và TCPListener. Trang 15
  16. Bảng 2 -4: Các thành phần của lớp TcpClient Mô tả Phương thức khởi tạo Tạo một đối tượng TcpClient. Chưa đặt thông số gì. TcpClient() Tạo một TcpClient và gắn cho nó một EndPoint cục TcpClient(IPEndPoint) 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) Tạo một đối tượng TcpClient và kết nối đến một máy TcpClient(String,Int32) 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ả Cho biết số byte đã nhận về từ mạng và có sẵn để đọc. Available Trả về Socket ứng với TCPClient hiện hành. Client Trạng thái cho biết đã kết nối được đến Server hay Connected chưa? Các hàm thành phần Mô tả Giải phóng đối tượng TcpClient n hưng không đóng kết Close() nối. Kết nối đến một máy TCP khác có Tên và số hiệu cổng. Connect(RemoteHost, RemotePort) Trả về NetworkStream để từ đó giúp ta gửi hay nhận GetStream() 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. 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: Trang 16
  17.  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 cpPClient.  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.6 Lớp 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 2 -5: Các thành phần của lớp TcpListener Phương thức khởi tạo Mô tả Tạo một TcpListener và lắng nghe tại cổng chỉ TcpListener ( Int32) đ ịnh. Tạo một TcpListener với giá trị Endpoint truyền TcpListener (IPEndPoint) vào. Tạo một TcpListener và lắng nghe các kết nối TcpListener(IPAddress,Int32) đến tại địa chỉ IP và cổng chỉ định. Mô tả Phương thức Chấp nhận một yêu cầu kết nối đang chờ. AcceptSocket( ) Trang 17
  18. Chấp nhận một yêu cầu kết nối đang chờ. (Ứng AcceptTcpClient() 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”). Cho biết liệu có kết nối nào đang chờ đợi không Pending() Bắt đầu lắng nghe các yêu cầu kết nối. Start() Dừng việc nghe. Stop() 2.2 Sơ lược về lập trình đa luồng : 2 .2.1 Khái niệm Luồng (Thread) Một luồng (Thread) là một chuỗi liên tiếp những sự thực thi trong chương trình. Trong một chương trình C#, việc thực thi bắt đầu bằng phương thức main() và tiếp tục cho đến khi kết thúc h àm main(). Cấu trúc này rất hay cho những chương trình có một chuỗi xác định những nhiệm vụ liên tiếp. Nhưng thường thì một chương trình cần làm nhiều công việc h ơn vào cùng một lúc. Ví dụ trong Internet Explorer khi ta đang tải một trang web thì ta nh ấn nút back hay một link nào đó, đ ể làm việc n ày Internet Explorer sẽ phải làm ít nhất là 3 việc: Lấy dữ liệu được trả về từ Internet cùng với các tập tin đi kèm. Th ể hiện trang Web. Xem người dùng có nhập để làm thứ gì khác không. Để đơn giản vấn đề này ta giả sử Internet Explorer chỉ làm hai công việc: Trình bày trang Web. Xem người dùng có nhập gì không. Để thực hành việc này ta sẽ viết m ột phương thức dùng để lấy và th ể hiện trang Web. Giả sử rằng việc trình bày trang Web m ất nhiều thời gian (do phải thi h ành các đoạn javascript hay các hiệu ứng n ào đó …). Vì vậy sau m ột khoảng thời gian ngắn khoảng 1/12 giây, phương thức sẽ kiểm tra xem người dùng có nhập gì không. Nếu có thì nó sẽ đuơc xử lí, nếu không thì việc trình bày trang sẽ được tiếp tục. Và sau 1/12 giây việc kiểm tra sẽ được lặp lại. Tuy nhiên viết phương thức này thì rất phức tạp do đó ta sẽ dùng kiến trúc event trong Window nghĩa là khi việc Trang 18
  19. nhập xảy ra hệ thống sẽ thông báo cho ứng dụng bằng cách đưa ra một event. Ta sẽ cập nhật phương thức để cho phép dùng các event: Ta sẽ viết một bộ xử lí event để đáp ứng đối với việc nhập của người dùng. Ta sẽ viết một phương thức để lấy và trình bày dữ liệu. Phương thức này được thực thi khi ta không làm b ất cứ điều gì khác. Ta hãy xem cách phương thức lấy và trình bày trang web làm việc: đầu tiên nó sẽ tự định thời gian. Trong khi nó đang chạy, máy tính không thể đáp ứng việc nhập của người dùng . Do đó nó ph ải chú ý đến việc định thời gian để gọi phương thức kiểm tra việc nhập của người dùng, nghĩa là phương thức vừa chạy vừa quan sát thời gian. Bên cạnh đó nó còn ph ải quan tâm đến việc lưu trữ trạng thái trước khi nó gọi phương thức khác để sau khi phương thức khác thực hiện xong nó sẽ trả về đúng chỗ nó đ ã dừng. Vào thời Windo w 3.1 đây th ực sự là những gì ph ải làm để xử lí tình huống này. Tuy nhiên ở NT3.1 và sau đó là Windows 95 trở đi đã có việc xử lí đa luồng điều n ày làm việc giải quyết vấn đề tiện lợi hơn. Dưới đây chúng ta sẽ tìm hiểu một vài lớp cơ bản trong ngôn ngữ lập trình C# và vấn đề đ ồng bộ hóa (Synchronization) trong lập trình đa luồng. 2 .2.2 Khảo sát namespace System.Threading Namespace System.Threading cung cấp một số kiểu dữ liệu cho phép bạn thực hiện lập trình đ a luồng. Ngoài việc cung cấp những kiểu dữ liệu tượng trưng cho một luồng cụ thể nào đó, namespace này còn định nghĩa những lớp có thể quản lý một collection các luồng (ThreadPool), một lớp Timer đơn giản (không dựa vào GUI) và các lớp cung cấp truy cập được đồng bộ vào dữ liệu được chia sẽ sử dụng. Trang 19
  20. Bảng 2 -6: Một số lớp của namespace System.Threading Các lớp thành viên Mô tả Lớp này dùng cung cấp truy cập đồng bộ hóa vào dữ Interlocked liệu đư ợc chia sẽ sử dụng (shared data). Lớp này cung cấp việc đồng bộ hóa các đối tượng luồng Moniter sử dụng khóa chốt (lock) và tín hiệu chờ (wait signal). Lớp này cung cấp việc đồng bộ hóa sơ đẳng có thể Mutex được dùng đối với inter process synchronization. Lớp này tượng trưng cho một luồng được thi hành trong Thread lòng Common Language Runtime. Sử dụng lớp này b ạn có kh ả năng bổ sung những luồng khác trong cùng AppDomain. Lớp n ày qu ản lý những luồng có liên hệ với nhau trong ThreadPool cùng một Process nào đó. Cho biết một delegate có thể được triệu gọi vào một lúc Timer được khai báo n ào đó. Tác vụ wait được thi h ành bởi luồng trong thread pool. Lớp n ày tượng trưng cho tất cả các đối tượng đồng bộ WaitHandle hóa (cho phép multiple wait) vào lúc chạy. Lớp này là m ột delegate chỉ về hàm hành sự nào đó ThreadStart phải được thi hành đầu tiên khi một luồng b ắt đầu. Delegate đối với Timer. TimerCallBack Lớp này là một delegate định nghĩa hàm hành sự kêu WaitCallBack gọi lại (callback) đối với ThreadPool user work item. 2.2.2.1 Lớp Thread Lớp đơn giản nh ất trong tất cả các lớp thuộc Namespace System.Threading là lớp Thread. Lớp này tượng trưng cho một vỏ bọc hướng đối tượng bao quanh một lộ trình thi hành trong lòng một AppDomain nào đó. Lớp này định nghĩa một số Trang 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2