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

77 896 0
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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

z  Luận văn Tìm hiểuchế hoạt động của Socket Thread trong .NET Framwork từ đó viết ứng dụng Chat trong mạng Lan Trang 1 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 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 MỤC LỤC Lời cảm ơn 2 MỤC LỤC 3 DANH SÁCH CÁC HÌNH VẼ 5 Chương 1: DANH SÁCH CÁC BẢNG BIỄU 7 Chương 2: Mở đầu 8 2.1 Lý do chọn đề tài: 8 2.2 Mục đích của đề tài: 8 2.3 Đối tượng phạm vi nghiên cứu 8 2.3.1 Đối tượng nghiên cứu 8 2.3.2 Phạm vi nghiên cứu 8 Chương 3: KIẾN THỨC ỨNG DỤNG 9 3.1 Sơ lược về lập trình Socket: 9 3.1.1 Khái niệm Địa chỉ cổng (Address & Port) 9 3.1.2 Lớp IPAddress 9 3.1.3 Lớp IPEndpoint 11 3.1.4 Lớp UDP 12 3.1.5 Lớp TCP (TCPClient) 14 3.1.6 Lớp TcpListener 17 3.2 Sơ lược về lập trình đa luồng: 18 3.2.1 Khái niệm Luồng (Thread) 18 3.2.2 Khảo sát namespace System.Threading 19 3.2.2.1 Lớp Thread 20 3.2.2.2 Thao tác với luồng 22 3.2.3 Đồng bộ hóa (Synchronization) trong lập trình đa luồng: 24 3.2.3.1 Đồng bộ hóa 24 3.2.3.2 Deadlock 30 3.2.3.3 Race condition 32 Chương 4: PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH 34 4.1 Phân tích 34 4.1.1 Phân tích nhu cầu thực tiễn: 34 4.1.2 Yêu cầu đề ra: 34 4.1.3 Mô hình dữ liệu ở mức quan niệm: 35 4.1.4 Phân tích các thành phần xữ lý: 36 4.1.4.1 Mô hình luồng xử lý đăng nhập 36 4.1.4.2 Mô hình luồng xử lý gởi tin nhắn 38 4.1.4.3 Mô hình luồng xử lý FriendList 40 4.1.4.4 Mô hình luồng xử lý Group Chat 42 4.2 Thiết kế các lớp xữ lý 47 Trang 3 4.2.1 Lớp DataLayer: 47 4.2.2 Lớp MyDatabase: 48 4.2.3 Lớp ImageListBoxItem 49 4.2.4 Lớp ImageListBox: 50 4.2.5 Lớp Settings: 51 4.2.6 Lớp MultilineListBoxItem: 52 4.2.7 Lớp MultilineListBox: 52 4.2.8 Lớp TabControlEx: 53 4.2.9 LớpMyDataPack: 54 4.2.10 Lớp ClientHandler: 55 4.3 Một số qui tắc hàm xử lý bản 56 4.3.1 Qui tắc gởi dữ liệu trong mạng: 56 4.3.2 Một số hàm xữ lý bản: 57 4.3.2.1 Hàm PackData 57 4.3.2.2 Hàm UnPackData 58 4.3.2.3 Hàm SaveSettings LoadSettings 60 4.3.2.4 Hàm theadListen 61 4.4 Thiết kế dữ liệu 62 4.4.1 Chuẩn hóa dữ liệu: 62 4.4.2 Mô hình dữ liệu ở mức vật lý: 62 4.4.3 Thiết kế dữ liệu: 62 4.4.4 Mô tả các ràng buộc toàn vẹn: 64 4.5 Thiết kế giao diện 65 4.5.1 Màn hình đăng nhập 65 4.5.2 Màn hình chính 66 4.5.3 Màn hình thêm Friend 66 4.5.4 Màn hình xóa Friend 67 4.5.5 Màn hình Chat With 67 4.5.6 Màn hình Invite Group 68 4.5.7 Màn hình Invite Another 68 4.5.8 Màn hình Settings 69 Chương 5: CÀI ĐẶT – THỬ NGHIỆM 70 5.1 Cài đặt chương trình 70 5.1.1 Cài đặt Server 70 5.1.2 Cài đặt Client 73 5.2 Hướng dẫn sử dụng 75 Chương 6: KẾT LUẬN 76 6.1 Kết quả đạt được 76 6.2 Hướng phát triển 76 TÀI LIỆU THAM KHẢO 77 Trang 4 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-3: Mô hình dữ liệu ở mức quan niệm 35 Hình 3-4: Mô hình xử lý đăng nhập 36 Hình 3-5: Mô hình xử lý đăng xuất 37 Hình 3-6: Mô hình xử lý gởi tin nhắn Online 38 Hình 3-7: Mô hình xử lý gởi tin nhắn Offline 39 Hình 3-8: Mô hình xử lý thêm Friend 40 Hình 3-9: Mô hình xử lý xóa Friend 41 Hình 3-10: Mô hình xử lý tạo Group 42 Hình 3-11: Mô hình xử lý đồng ý gia nhập Group 43 Hình 3-12: Mô hình xử lý thoát khỏi Group 44 Hình 3-13: Mô hình xử lý hủy Group 45 Hình 3-14: Mô hình xử lý gởi tin nhắn trong Group 46 Hình 3-15: Mô hình lớp DataLayer 47 Hình 3-16: Mô hình lớp MyDatabase 48 Hình 3-17: Mô hình lớp ImageListBoxItem 49 Hình 3-18: Mô hình lớp ImageListBox 50 Hình 3-19: Mô hình lớp Settings 51 Hình 3-20: Mô hình lớp MultilineListBoxItem 52 Hình 3-21: Mô hình lớp TabControlEx 53 Hình 3-22: Mô hình lớp MyDataPack 54 Hình 3-23: Mô hình ClientHandler 55 Hình 3-24: Mô hình dữ liệu ở mức vật lý 62 Hình 3-25: Màn hình đăng nhập 65 Hình 3-26: Màn hình chính 66 Hình 3-27: Màn hình thêm Friend 66 Trang 5 Hình 3-28: Màn hình xóa Friend 67 Hình 3-29: Màn hình Chat With 67 Hình 3-30: Màn hình Invite Group 68 Hình 3-31: Màn hình Invite Another 68 Hình 3-32: Màn hình Invite Another 69 Hình 4-33: Cài đặt Microsoft SQL Destop Engine 70 Hình 4-34: Cài đặt Server – Màn hình Customer Information 71 Hình 4-35: Cài đặt Server – Màn hình Destination Folder 72 Hình 4-36: Cài đặt Server – Màn hình SQL Login 73 Hình 4-37: Cài đặt Server – Màn hình Finish 73 Hình 4-38: Cài đặt Client – Màn hình Customer Information 74 Hình 4-39: Cài đặt Client – Màn hình Destination Folder 74 Hình 4-40: Cài đặt Client – Màn hình Finish 75 Trang 6 Chương 1: 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 20 Bảng 2-8: Các thành viên cấp đối tượng của lớp Thread 21 Bảng 3-9: Mã nguồn hàm PackData 57 Bảng 3-10: Mã nguồn hàm UnPackData 58 Bảng 3-11: Mã nguồn hàm SaveSettings LoadSettings 60 Bảng 3-12: Mã nguồn hàm theadListen 61 Bảng 3-13: Table Users 63 Bảng 3-14: Table FriendList 63 Bảng 3-15: Table OfflineMessage 64 Bảng 3-16: Table GroupChat 64 Bảng 3-17: Table GroupDetail 64 1.1 Trang 7 Chương 2: Mở đầu 2.1 Lý do chọn đề tài: Hiện nay, mạng Lan đã những tiến bộ vượt bậc 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 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 đó. 2.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 bản như: gởi tin nhắn, tạo một nhóm Chat lưu thông tin bạn bè. 2.3 Đối tượng phạm vi nghiên cứu 2.3.1 Đối tượng nghiên cứu Tìm hiểu được cơ chế hoạt động của Socket Thread trong .NET Framwork từ đó viết ứng dụng Chat trong mạng Lan. 2.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 Chương 3: KIẾN THỨC ỨNG DỤNG 3.1 Sơ lược về lập trình Socket: 3.1.1 Khái niệm Địa chỉ cổng (Address & Port) Nguyên lý:  Trong một máy 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 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ỉ duy nhất một đường truyền dữ liệu (để gửi nhận). Vấn đề : Rất 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 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) số hiệu cổng (Port) của ứng dụng kia. 3.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 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ố giá trị từ 0-255 cách nhau bởi dấu chấm. Để thể hiện địa chỉ này, người ta thể viết dưới các dạng sau: Tên : Ví dụ May01, Server, …. Trang 9 Đị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 diễn địa chỉ 192.168.1.1 với khai báo “byte[] DiaChi = new byte[4];”, ta thể viết:  DiaChi(0) = 192;  DiaChi(1) = 168;  DiaChi(2) = 1;  DiaChi(3) = 1; Hoặc cũng thể là một số (long), độ 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 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 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ả Any Cung cấp một địa chỉ IP (thường là 0.0.0.0) để chỉ ra 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. Broadcast Cung cấp một địa chỉ IP quảng bá (Broadcast, thường là 255.255.255.255), ở dạng số long. Loopback Trả về một địa chỉ IP lặp (IP Loopback, ví dụ 127.0.0.1). AddressFamily Trả về họ địa chỉ của địa chỉ IP hiện hành. Nếu địa chỉ ở dạng IPv4 thì kết quả là Internetwork, Trang 10 1 (Byte 0) 1 168 192 (Byte 3) [...]... thông tin trong mạng Lan cũng phát triển theo Chính vì vậy, một chương trình Chat phục vụ cho nhu cầu liên lạc, trao đổi thông tin trong mạng Lan là rất cần thiết 4.1.2 Yêu cầu đề ra: Yêu cầu đặt ra là xây dựng chương trình Chat hoạt động trong mạng Lan sử dụng Socket Multithreading đòi hỏi các chức năng nghiệp vụ sau: Chat giữa hai người với nhau: Hai người gởi thông điệp qua lại cho nhau Chat giữa... hình ảnh đồ hoạ, người dùng yêu cầu thay đổi độ sâu của màu trong ảnh Ta bắt đầu khởi tạo một đối tượng luồng như sau: // entryPoint được khai báo trước là 1 delegate kiểu ThreadStart Thread depthChangeThread = new Thread( entryPoint); Đoạn mã trên biểu diễn một hàm khởi tạo của Thread với một thông số chỉ định điểm nhập của một luồng Đó là phương thức nơi luồng bắt đầu thi hành Trong tình huống... TCP khác Tên số hiệu cổng RemotePort) 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 StreamWriter để gửi nhận dữ liệu dưới dạng xâu ký tự) Khi đã gắn vào StreamReader StreamWriter rồi thì ta thể gửi 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... (counter < 1000) { int temp = counter; temp++; Thread. Sleep(1); counter = temp; Console.WriteLine( "Thread {0} Incrementer: {1}", Thread. CurrentThread.Name, counter); } } catch (ThreadInterruptedException) { Console.WriteLine( "Thread {0} interrupted! Cleaning up ", Thread. CurrentThread.Name); } finally Trang 26 { Console.WriteLine( "Thread {0} Existing.", Thread. CurrentThread.Name); } } } } Trang 27 Kết quả... phải làm để xử lí tình huống này Tuy nhiên ở NT3.1 sau đó là Windows 95 trở đi đã 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 bản trong ngôn ngữ lập trình C# vấn đề đồng bộ hóa (Synchronization) trong lập trình đa luồng 3.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... depthChangeThread.Abort(); depthChangeThread.Join(); Trang 23 Join() cũng một số overload khác chỉ định thời gian đợi Nếu hết thời gian này việc thi hành sẽ được tiếp tục Nếu một luồng chính muốn thi hành một vài hành động trên nó, nó cần một tham chiếu đến đối tượng luồng mà đại diện cho luồng riêng Nó thể lấy một tham chiếu sử dụng thuộc tính static -CurrentThread- của lớp Thread: Thread myOwnThread... nào đó, namespace này còn định nghĩa những lớp 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) 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 Bảng 2-6: Một số lớp của namespace System.Threading Các lớp thành viên Interlocked Mô tả Lớp này dùng cung cấp truy cập đồng bộ hóa vào dữ Moniter liệu được chia sẽ sử dụng. .. temp; Console.WriteLine( "Thread {0} Incrementer: {1}", Thread. CurrentThread.Name, counter); } } } // Các khối catch finally không thay đổi Trang 29 Kết quả thu được sẽ là: Hình 2-2: Kết quả chương trình sử dụng đồng bộ hóa Việc đồng bộ các luồng là quan trọng trong các ứng dụng đa luồng Tuy nhiên một số lỗi tinh vi khó kiểm soát thể xuất hiện cụ thể là deadlock race condition 3.2.3.2... ThreadStart(ChangeColorDepth); Thread depthChangeThread = new Thread( entryPoint); depthChangeThread.Name = “Depth Change Thread ; depthChangeThread.Start(); Sau điểm này, cả hai luồng sẽ chạy đồng bộ với nhau Trang 22 Trong đoạn mã này ta đăng kí tên cho luồng bằng cách dùng thuộc tính Thread. Name Không cần thiết làm điều này nhưng nó thể hữu ích Lưu ý rằng bởi vì điểm đột nhập vào luồng (trong ví dụ này là... TcpClient kết nối đến một máy địa chỉ số hiệu cổng được truyền vào Các thuộc tính Available Client Connected RemoteHost thể là địa chỉ IP chuẩn hoặc tên máy Mô tả Cho biết số byte đã nhận về từ mạng sẵn để đọc Trả về Socket ứng với TCPClient hiện hành Trạng thái cho biết đã kết nối được đến Server hay Các hàm thành phần Close() chưa? Mô tả Giải phóng đối tượng TcpClient nhưng không đóng . z  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 Lời cảm ơn Em xin chân. Chat và lưu thông tin bạn bè. 2.3 Đối tượng và phạm vi nghiên cứu 2.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. 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 đó. 2.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ư:

Ngày đăng: 27/06/2014, 09:48

Từ khóa liên quan

Mục lục

  • Lời cảm ơn

  • MỤC LỤC

  • DANH SÁCH CÁC HÌNH VẼ

  • Chương 1: DANH SÁCH CÁC BẢNG BIỄU

  • Chương 2: Mở đầu

    • 2.1 Lý do chọn đề tài:

    • 2.2 Mục đích của đề tài:

    • 2.3 Đối tượng và phạm vi nghiên cứu

      • 2.3.1 Đối tượng nghiên cứu

      • 2.3.2 Phạm vi nghiên cứu

      • Chương 3: KIẾN THỨC ỨNG DỤNG

        • 3.1 Sơ lược về lập trình Socket:

          • 3.1.1 Khái niệm Địa chỉ và cổng (Address & Port)

          • 3.1.2 Lớp IPAddress

          • 3.1.3 Lớp IPEndpoint

          • 3.1.4 Lớp UDP

          • 3.1.5 Lớp TCP (TCPClient)

          • 3.1.6 Lớp TcpListener

          • 3.2 Sơ lược về lập trình đa luồng:

            • 3.2.1 Khái niệm Luồng (Thread)

            • 3.2.2 Khảo sát namespace System.Threading

              • 3.2.2.1 Lớp Thread

              • 3.2.2.2 Thao tác với luồng

              • 3.2.3 Đồng bộ hóa (Synchronization) trong lập trình đa luồng:

                • 3.2.3.1 Đồng bộ hóa

                • 3.2.3.2 Deadlock

                • 3.2.3.3 Race condition

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan