Luận Văn Tìm Hiểu Cơ Chế Hoạt Động của Socket và Thread trong .NET Framework

Tài liệu nghiên cứu 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, tổng hợp lý thuyết và thực hành, cung cấp kiến thức chuyên

Trường đại học

Trường Đại Học

Chuyên ngành

Công Nghệ Thông Tin

Người đăng

Ẩn danh

Thể loại

luận văn

2009

78
2
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI CẢM ƠN

1. CHƯƠNG 1: MỞ ĐẦU

1.1. Lý do chọn đề tài

1.2. Mục đích của đề tài

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

1.3.1. Đối tượng nghiên cứu

1.3.2. Phạm vi nghiên cứu

2. CHƯƠNG 2: KIẾN THỨC ỨNG DỤNG

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)

2.2. Sơ lược về lập trình đa luồng

2.2.1. Khái niệm Luồng (Thread)

2.2.2. Khảo sát namespace System.Threading

2.2.3. Thao tác với luồng

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

3. CHƯƠNG 3: PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH

3.1. Phân tích nhu cầu thực tiễn

3.2. Yêu cầu đề ra

3.3. Mô hình dữ liệu ở mức quan niệm

3.4. Phân tích các thành phần xử lý

3.4.1. Mô hình luồng xử lý đăng nhập

3.4.2. Mô hình luồng xử lý gửi tin nhắn

3.4.3. Mô hình luồng xử lý FriendList

3.4.4. Mô hình luồng xử lý Group Chat

3.5. Thiết kế các lớp xử lý

3.6. Một số qui tắc và hàm xử lý cơ bản

3.6.1. Qui tắc gửi dữ liệu trong mạng

3.6.2. Một số hàm xử lý cơ bản

3.6.3. Hàm SaveSettings và LoadSettings

3.7. Thiết kế dữ liệu

3.7.1. Chuẩn hóa dữ liệu

3.7.2. Mô hình dữ liệu ở mức vật lý

3.7.3. Thiết kế dữ liệu

3.7.4. Mô tả các ràng buộc toàn vẹn

3.8. Thiết kế giao diện

3.8.1. Màn hình đăng nhập

3.8.2. Màn hình chính

3.8.3. Màn hình thêm Friend

3.8.4. Màn hình xóa Friend

3.8.5. Màn hình Chat With

3.8.6. Màn hình Invite Group

3.8.7. Màn hình Invite Another

3.8.8. Màn hình Settings

4. CHƯƠNG 4: CÀI ĐẶT – THỬ NGHIỆM

4.1. Cài đặt chương trình

4.1.1. Cài đặt Server

4.1.2. Cài đặt Client

4.2. Hướng dẫn sử dụng

5. CHƯƠNG 5: KẾT LUẬN

5.1. Kết quả đạt được

5.2. Hướng phát triển

TÀI LIỆU THAM KHẢO

Tóm tắt

I. Tổng Quan Về Socket và Thread

Bài viết này khám phá cơ chế SocketThread trong .NET Framework, nền tảng để xây dựng ứng dụng chat LAN. Mạng LAN ngày càng phổ biến, kéo theo nhu cầu liên lạc và trao đổi thông tin nội bộ tăng cao. Ứng dụng chat LAN đáp ứng nhu cầu này bằng cách cung cấp khả năng giao tiếp trực tiếp giữa các người dùng trong mạng. Để xây dựng ứng dụng này, việc hiểu rõ về Socket programming C#Thread programming C# là vô cùng quan trọng. Socket .NET cho phép ứng dụng giao tiếp với nhau qua mạng, còn Thread .NET giúp xử lý đồng thời nhiều yêu cầu, đảm bảo ứng dụng hoạt động mượt mà và hiệu quả. Luận văn gốc nhấn mạnh tầm quan trọng của việc tìm hiểu cơ chế hoạt động của SocketThread để xây dựng ứng dụng chat hiệu quả.

1.1. Giới Thiệu Chi Tiết Về Socket Trong .NET Framework

Socket là một endpoint trong giao tiếp mạng, cho phép các ứng dụng trao đổi dữ liệu với nhau. Trong .NET Framework, System.Net.Sockets namespace cung cấp các lớp để làm việc với Socket. Socket cho phép ứng dụng lắng nghe các kết nối đến (server) hoặc kết nối đến một Socket Server .NET khác (client). Việc sử dụng Socket cho phép ứng dụng giao tiếp qua các giao thức như TCP/IP .NET hoặc UDP .NET. Socket đóng vai trò quan trọng trong việc thiết lập và duy trì kết nối giữa các ứng dụng trong mạng LAN.

1.2. Tìm Hiểu Về Thread và Multithreading Trong .NET

Thread là một đơn vị thực thi nhỏ nhất trong một tiến trình. Multithreading .NET cho phép ứng dụng thực hiện nhiều tác vụ đồng thời, cải thiện hiệu suất và khả năng phản hồi. Trong ứng dụng chat, Thread có thể được sử dụng để xử lý đồng thời nhiều kết nối từ người dùng, gửi và nhận tin nhắn, và cập nhật giao diện người dùng. System.Threading namespace cung cấp các lớp để tạo và quản lý Thread. Việc sử dụng Thread một cách hiệu quả đòi hỏi phải hiểu rõ về Thread synchronizationThread safety để tránh các vấn đề như race condition và deadlock.

II. Thách Thức Khi Xây Dựng Ứng Dụng Chat LAN Với

Xây dựng ứng dụng chat LAN bằng .NET Framework không phải là một nhiệm vụ đơn giản. Một trong những thách thức lớn nhất là quản lý đồng thời nhiều kết nối từ người dùng. Mỗi kết nối đòi hỏi một Thread riêng để xử lý, và việc tạo quá nhiều Thread có thể dẫn đến tình trạng quá tải hệ thống. Ngoài ra, việc đảm bảo Thread safetyThread synchronization là rất quan trọng để tránh các lỗi không mong muốn. Vấn đề bảo mật cũng cần được xem xét, đặc biệt là khi truyền dữ liệu nhạy cảm qua mạng. Việc xử lý lỗi và ngoại lệ cũng là một phần quan trọng của quá trình phát triển, đảm bảo ứng dụng hoạt động ổn định và tin cậy.

2.1. Vấn Đề Về Concurrent Programming và Thread Synchronization

Concurrent programming .NETThread synchronization là những thách thức lớn khi xây dựng ứng dụng đa luồng. Việc truy cập đồng thời vào các tài nguyên chia sẻ có thể dẫn đến race condition, khi kết quả của chương trình phụ thuộc vào thứ tự thực hiện của các Thread. Để giải quyết vấn đề này, cần sử dụng các cơ chế đồng bộ hóa như Mutex, Semaphore, Lock, và Monitor. Việc sử dụng các cơ chế này một cách cẩn thận là rất quan trọng để tránh deadlock, khi các Thread chờ đợi lẫn nhau và không thể tiếp tục thực hiện.

2.2. Xử Lý Socket Exception và Đảm Bảo Network Security .NET

Socket exception handling là một phần quan trọng của việc xây dựng ứng dụng mạng. Các lỗi như mất kết nối, timeout, và lỗi giao thức có thể xảy ra bất cứ lúc nào. Việc xử lý các lỗi này một cách đúng đắn giúp ứng dụng hoạt động ổn định và cung cấp thông tin hữu ích cho người dùng. Network security .NET cũng là một vấn đề quan trọng cần được xem xét. Việc mã hóa dữ liệu, xác thực người dùng, và kiểm soát truy cập giúp bảo vệ ứng dụng khỏi các cuộc tấn công từ bên ngoài.

2.3. Tối Ưu Hóa Socket Performance và Thread Performance

Socket performanceThread performance là những yếu tố quan trọng ảnh hưởng đến khả năng mở rộng của ứng dụng. Việc sử dụng Socket buffer size phù hợp, Thread pool, và Async/Await có thể giúp cải thiện hiệu suất. Việc tránh tạo quá nhiều Thread, giảm thiểu thời gian chờ đợi, và sử dụng các thuật toán hiệu quả cũng là những cách để tối ưu hóa hiệu suất.

III. Hướng Dẫn Xây Dựng Ứng Dụng Chat LAN Cơ Bản Với C

Phần này cung cấp hướng dẫn từng bước để xây dựng một ứng dụng chat LAN cơ bản bằng C#. Đầu tiên, cần thiết kế kiến trúc client-server, trong đó server đóng vai trò trung tâm điều phối và client là các ứng dụng chat của người dùng. Tiếp theo, cần tạo Socket Server .NET để lắng nghe các kết nối từ client. Khi một client kết nối, server sẽ tạo một Thread mới để xử lý kết nối đó. Client sẽ sử dụng Socket Client .NET để kết nối đến server và gửi/nhận tin nhắn. Việc sử dụng Network stream giúp truyền dữ liệu giữa client và server.

3.1. Thiết Kế Client Server Architecture .NET Cho Chat LAN

Kiến trúc Client-Server architecture .NET là nền tảng cho ứng dụng chat LAN. Server đóng vai trò trung tâm, quản lý kết nối và chuyển tiếp tin nhắn giữa các client. Client là ứng dụng chạy trên máy của người dùng, cho phép họ gửi và nhận tin nhắn. Việc thiết kế kiến trúc này cần xem xét các yếu tố như khả năng mở rộng, bảo mật, và hiệu suất. Server cần có khả năng xử lý đồng thời nhiều kết nối, và client cần có giao diện người dùng thân thiện và dễ sử dụng.

3.2. Cách Tạo Socket Server và Socket Client Trong C

Để tạo Socket Server .NET, sử dụng lớp TcpListener để lắng nghe các kết nối đến. Khi một client kết nối, sử dụng phương thức AcceptTcpClient() để chấp nhận kết nối và tạo một Thread mới để xử lý. Để tạo Socket Client .NET, sử dụng lớp TcpClient để kết nối đến server. Sử dụng phương thức Connect() để thiết lập kết nối và phương thức GetStream() để lấy Network stream để gửi/nhận dữ liệu.

3.3. Sử Dụng Network Stream Để Truyền Dữ Liệu Giữa Client và Server

Network stream là một kênh truyền dữ liệu giữa client và server. Sử dụng lớp StreamReaderStreamWriter để đọc và ghi dữ liệu vào Network stream. Việc sử dụng Encoding .NET như UTF-8 encoding hoặc ASCII encoding đảm bảo dữ liệu được truyền đi một cách chính xác. Cần chú ý đến việc Serialization .NETDeserialization .NET để chuyển đổi dữ liệu thành dạng byte trước khi truyền và ngược lại.

IV. Ứng Dụng Thực Tế Chat Group và Quản Lý Danh Sách Bạn Bè

Ứng dụng chat LAN không chỉ dừng lại ở việc gửi tin nhắn cá nhân. Chức năng Chat group cho phép người dùng tạo và tham gia các nhóm chat để thảo luận về một chủ đề cụ thể. Việc quản lý danh sách bạn bè giúp người dùng dễ dàng tìm kiếm và kết nối với những người quen. Để triển khai các chức năng này, cần thiết kế cơ sở dữ liệu để lưu trữ thông tin người dùng, danh sách bạn bè, và tin nhắn nhóm. Việc sử dụng Message queue có thể giúp xử lý tin nhắn một cách hiệu quả.

4.1. Triển Khai Chức Năng Chat Group Trong Ứng Dụng LAN

Để triển khai chức năng Chat group, cần thiết kế cơ sở dữ liệu để lưu trữ thông tin về các nhóm chat, thành viên của nhóm, và tin nhắn trong nhóm. Khi một người dùng gửi tin nhắn vào nhóm, server sẽ chuyển tiếp tin nhắn đó đến tất cả các thành viên của nhóm. Cần chú ý đến việc quản lý quyền truy cập vào nhóm, cho phép người dùng mời người khác vào nhóm, và loại bỏ thành viên khỏi nhóm.

4.2. Thiết Kế Cơ Sở Dữ Liệu Cho Ứng Dụng Chat LAN

Cơ sở dữ liệu là một phần quan trọng của ứng dụng chat LAN. Cần thiết kế các bảng để lưu trữ thông tin người dùng, danh sách bạn bè, tin nhắn cá nhân, thông tin nhóm chat, và tin nhắn nhóm. Việc sử dụng khóa chính và khóa ngoại giúp đảm bảo tính toàn vẹn của dữ liệu. Cần lựa chọn hệ quản trị cơ sở dữ liệu phù hợp, như SQL Server, MySQL, hoặc PostgreSQL.

4.3. Sử Dụng Message Queue Để Xử Lý Tin Nhắn Hiệu Quả

Message queue là một cơ chế giúp xử lý tin nhắn một cách hiệu quả, đặc biệt là khi có nhiều tin nhắn được gửi đến cùng một lúc. Khi một tin nhắn được gửi, nó sẽ được đưa vào Message queue. Server sẽ lấy tin nhắn từ Message queue và xử lý chúng theo thứ tự. Việc sử dụng Message queue giúp giảm tải cho server và đảm bảo tin nhắn được xử lý một cách đáng tin cậy.

V. Kết Luận và Hướng Phát Triển Ứng Dụng Chat LAN

Bài viết đã trình bày cơ chế SocketThread trong .NET Framework và cách sử dụng chúng để xây dựng ứng dụng chat LAN. Việc hiểu rõ về Socket programming C#Thread programming C# là rất quan trọng để xây dựng ứng dụng hiệu quả và tin cậy. Trong tương lai, có thể phát triển ứng dụng chat LAN với nhiều tính năng hơn, như hỗ trợ gửi file, gọi video, và tích hợp với các dịch vụ khác. Việc sử dụng các công nghệ mới như Async/AwaitTask Parallel Library (TPL) có thể giúp cải thiện hiệu suất và khả năng mở rộng của ứng dụng.

5.1. Tổng Kết Các Kỹ Thuật Lập Trình Socket và Thread

Bài viết đã trình bày các kỹ thuật lập trình SocketThread cơ bản trong .NET Framework. Việc sử dụng lớp TcpListenerTcpClient giúp tạo Socket Server .NETSocket Client .NET. Việc sử dụng lớp Thread giúp xử lý đồng thời nhiều kết nối. Việc sử dụng các cơ chế đồng bộ hóa giúp đảm bảo Thread safetyThread synchronization.

5.2. Hướng Phát Triển Ứng Dụng Chat LAN Với .NET Framework

Trong tương lai, có thể phát triển ứng dụng chat LAN với nhiều tính năng hơn, như hỗ trợ gửi file, gọi video, và tích hợp với các dịch vụ khác. Việc sử dụng các công nghệ mới như Async/AwaitTask Parallel Library (TPL) có thể giúp cải thiện hiệu suất và khả năng mở rộng của ứng dụng. Việc chú trọng đến Network security .NETException handling best practices cũng là rất quan trọng.

04/06/2025

Trích đoạn nội dung tài liệu

Mở đầu 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 đó.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è.3 Đối tƣợng và phạm vi nghiên cứu 1.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.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 2: KIẾN THỨC ỨNG DỤNG 2.1 Sơ lƣợc về lập trình Socket: 2.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. 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 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 Địa chỉ IP nhƣng đặt trong một xâu: "192.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.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.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.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ả Any Cung cấp một địa chỉ IP (thƣờng là 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), ở dạng số long. Loopback Trả về một địa chỉ IP lặp (IP Loopback, ví dụ 127. AddressFamily Trả về họ địa chỉ của địa chỉ IP hiện hành.

Nếu địa chỉ Trang 10 ở dạng IPv4 thì kết quả là Internetwork, và InternetworkV6 nếu là địa chỉ IPv6. Phƣơng thức Mô tả IPAddress(Int64) Tạo địa chỉ IP từ một số long. IPAddress(Byte[]) Tạo địa chỉ IP từ một mảng Byte. GetAddressByte () Chuyển địa chỉ thành mảng Byte.

HostToNetworkOrder() Đảo thứ tự Byte của một số cho đúng với thứ tự Byte trong địa chỉ IPAddress. IsLoopback() Cho biết địa chỉ có phải là địa chỉ lặp hay không? Ví dụ 1: Kiểm tra xem 192.300 có phải là địa chỉ IP hợp lệ không private void KiemTra() { String Ip1 = "127.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ả IPEndPoint(Int64, Int32) Tạo một đối tƣợng mới của lớp IPEndPoint, tham số truyền vào là địa chỉ IP (ở dạng số) và cổng sẽ dùng để giao tiếp. IPEndPoint(IPAddress, Tạo một đối tƣợng mới của lớp IPEndPoint, Int32) Tham số truyền vào là một địa chỉ IPAddress và số hiệu cổng dùng để giao tiếp. Thuộc tính Mô tả Address Trả về hoặc thiết lập địa chỉ IP cho Endpoint (trả về một đối tƣợng IPAddress). AddressFamily Lấy về loại giao thức mà Endpoint này đang sử dụng.

Port Lấy hoặc gán số hiệu cổng của Endpoint. Phƣơng thức Mô tả Create() Tạo một Endpoint từ một địa chỉ socket (socket address). ToString() Trả về địa chỉ IP và số hiệu cổng theo khuôn dạng địa chỉ: cổng.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.NET, lớp UDPClient (nằm trong namesapce System.Sockets) đóng gói các chức năng của giao thức UDP. Trang 13 Bảng 2-3: Các thành viên của lớp UDPClient Phƣơng thức khởi tạo Mô tả UdpClient () Tạo một đối tƣợng (thể hiện) mới của lớp UDPClient. UdpClient (AddressFamily) Tạo một đối tƣợng (thể hiện) mới của lớp UDPClient. Thuộc một dòng địa chỉ (AddressFamily) đƣợc chỉ định.

UdpClient (Int32) Tạo một UdpClient và gắn (bind) một cổng cho nó. UdpClient(Int32, Tạo một UdpClient và gán số hiệu cổng, AddressFamily) AddressFamily UdpClient(String, Int32) Tạo một UdpClient và thiết lập với một trạm từ xa mặc định. Phƣơng thức Mô tả BeginReceive() Nhận dữ liệu Không đồng bộ từ máy ở xa. BeginSend() Gửi không đồng bộ dữ liệu tới máy ở xa Close() Đóng kết nối.

Connect() Thiết lập một Default remote host. EndReceive() Kết thúc nhận dữ liệu không đồng bộ ở trên EndSend() Kết thúc việc gửi dữ liệu không đồng bộ ở trên Receive (ref IPEndPoint) Nhận dữ liệu (đồng bộ) do máy ở xa gửi. (Đồng bộ có nghĩa là các lệnh ngay sau lệnh Receive chỉ đƣợc thực thi nếu Receive đã nhận đƣợc dữ liệu về. Còn nếu nó chƣa nhận đƣợc – dù chỉ một chút – thì nó vẫn cứ chờ (blocking)) Send() Gửi dữ liệu (đồng bộ) cho máy ở xa.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 hai lớp có tên là TCPClient và TCPListener. Trang 15 Bảng 2-4: Các thành phần của lớp TcpClient Phƣơng thức khởi tạo Mô tả TcpClient() Tạo một đối tƣợng TcpClient. Chƣa đặt thông số gì.

TcpClient(IPEndPoint) Tạo một TcpClient và gắn cho nó một EndPoint cục bộ. (Gán địa chỉ máy cục bộ và số hiệu cổng để sử dụng trao đổi thông tin về sau) TcpClient(String,Int32) Tạo một đối tƣợng TcpClient và kết nối đến một máy có địa chỉ và số hiệu cổng đƣợc truyền vào. RemoteHost có thể là địa chỉ IP chuẩn hoặc tên máy. Các thuộc tính Mô tả Available Cho biết số byte đã nhận về từ mạng và có sẵn để đọc.

Client Trả về Socket ứng với TCPClient hiện hành. Connected Trạng thái cho biết đã kết nối đƣợc đến Server hay chƣa? Các hàm thành phần Mô tả Close() Giải phóng đối tƣợng TcpClient nhƣng không đóng kết nối. Connect(RemoteHost, Kết nối đến một máy TCP khác có Tên và số hiệu cổng. RemotePort) GetStream() Trả về NetworkStream để từ đó giúp ta gửi hay nhận dữ liệu.

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  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.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 ….

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ

Tài liệu "Tìm Hiểu Cơ Chế Socket và Thread trong .NET Framework để Xây Dựng Ứng Dụng Chat trên Mạng LAN" cung cấp cái nhìn sâu sắc về cách thức hoạt động của socket và thread trong .NET Framework, đặc biệt trong việc phát triển ứng dụng chat trên mạng LAN. Tài liệu này không chỉ giải thích các khái niệm cơ bản mà còn hướng dẫn chi tiết cách triển khai, giúp người đọc nắm vững kỹ thuật lập trình mạng.

Một trong những lợi ích lớn nhất mà tài liệu mang lại là khả năng giúp lập trình viên hiểu rõ hơn về cách tối ưu hóa hiệu suất ứng dụng chat thông qua việc sử dụng socket để giao tiếp và thread để xử lý đồng thời. Điều này không chỉ nâng cao trải nghiệm người dùng mà còn cải thiện khả năng mở rộng của ứng dụng.

Nếu bạn muốn mở rộng kiến thức của mình về lập trình mạng, hãy tham khảo tài liệu "Lập Trình Mạng Lượng Anh Hoàng". Tài liệu này sẽ cung cấp cho bạn những kiến thức cơ bản và nâng cao hơn về lập trình mạng, giúp bạn có cái nhìn toàn diện hơn về lĩnh vực này.