Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 55 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
55
Dung lượng
1,56 MB
Nội dung
ĐẠI HỌC ĐÀ NẴNG TRƢỜNG ĐẠI HỌC SƢ PHẠM KHOA TIN HỌC - - KHÓA LUẬN TỐT NGHIỆP Đề tài: VIẾT CHƢƠNG TRÌNH TRỊ CHUYỆN ĐƠN GIẢN BẰNG NGƠN NGỮ LẬP TRÌNH C# Giảng viên hướng dẫn Sinh viên thực Lớp : Th.S Ngơ Đình Thƣởng : Nguyễn Văn Xuân : 09SPT Muc Lục LỜI MỞ ĐẦU LỜI CẢM ƠN NHẬN XÉT CỦA GIÁO VIÊN HƢỚNG DẪN Chƣơng 1: CƠ SỞ LÝ THUYẾT VÀ ỨNG DỤNG 1.1 Sơ lƣợc lập trình Socket 1.1.1 Khái niệm IPAddress Port 1.1.2 Lớp IPAddress 1.1.3 Lớp IPEndPoint 1.1.4 Lập trình Socket hƣớng kết nối(TCP) 1.1.5 Lập trình Socket phi kết nối(UDP) 10 1.1.6 Lớp Helper C# Socker 11 1.2 Xử lý tiến trình lập trình đa luồng 15 1.2.1 Khái niệm luồng 15 1.2.2 Khảo sát namespace System.Threading 16 1.3 Đồng bất đồng lập trình đa luồng 19 1.4 Hệ mã hóa cơng khai RSA 22 1.4.1 Khái niệm mã hóa 22 1.4.2 Hệ mã khóa 24 1.4.3 Thuật toán mã hóa RSA 25 Chƣơng 2: PHÂN TÍCH VÀ THIẾT KẾ CHƢƠNG TRÌNH 30 2.1 Phân tích 30 2.1.1 Phân tích nhu cầu thực tiễn 30 2.1.2 Yêu cầu đề 30 2.1.3 Phân tích thành phần xử lý 30 2.1.4 Quá trình xử lý chƣơng trình 39 2.2 Thiết kế 45 2.2.1 Thiết kế Server 45 2.2.2 Thiết kế Client 48 2.3 Cài đặt sử dụng chƣơng trình 52 KẾT LUẬN 54 DANH MỤC TÀI LIỆU THAM KHẢO 55 DANH SÁCH HÌNH VẼ SƠ ĐỒ Hình 1.1 Lập trình socket hướng kết nối (TCP) .6 Hình 1.2 Lập trình socket phi kết nối (UDP) Hình 1.3 Kết chương trình đồng hóa 18 Hình 1.4 Kết chương trình bất đồng 18 Hình 1.5 Mã hóa .20 Hình 1.6 Mã hóa giải mã thơng tin truyền .20 Hình 1.7 Mã hóa bí mật 21 Hình 1.8 Mã hóa công khai 21 Hình 2.1 Sơ đồ xử lý đăng nhập .28 Hình 2.2 Sơ đồ xử lý đăng xuất 29 Hình 2.3 Sơ đồ xử lý gởi tin nhắn 30 Hình 2.4 Giao diện Server thu gọn 42 Hình 2.5.a Giao diện Server mở rộng chưa kết nối 43 Hình 2.5.b Giao diện Server mở rộng có kết nối 43 Hình 2.6 Giao diện Client đăng nhập .44 Hình 2.7 Giao diện Client thu gọn 45 Hình 2.8 Giao diện Client Chat room 46 Hình 2.9 Giao din Client tin nhắn riêng tư .47 Hình 2.10 Giao diện Client Chat riêng tư 48 LỜI MỞ ĐẦU Với phát triển Internet nay, việc viết phần mềm ứng dụng mạng trở nên cần thiết phổ biến với nhà phát triển phần mềm Với nhu cầu trao đổi thông tin, liên lạc trò chuyện mạng ngày tăng nay, việc nghiên cứu xây dựng thành cơng chương trình Chat đáp ứng nhu cầu cần thiết làm phong phú thêm phương thức trao đổi trị chuyện chương trình Chat Với lý đặt thế, việc nghiên cứu xây dựng nên chương trình Chat phải đảm bảo tính cần thiết như: gởi tin nhắn riêng tư nhóm user, tạo danh sách bạn bè Việc nghiên cứu xây dựng chương trình Chat cần thực cách kĩ lưỡng khoa học để tạo ứng dụng có với tính cần thiết, dể dàng sử dụng, tao tác linh hoạt Để xây dựng thành cơng chương trình Chat, em tập trung vào đối tượng phạm vi nghiên cứu sau: Đối tượng nghiên cứu: tìm hiểu chế hoạt động Socket, nguyên lý lập trình đa luồng, đồng bất đồng lập trình đa luồng, cuối ứng dụng hệ mã hóa cơng khai RSA để mã hóa thơng tin truyền mạng Phạm vi nghiên cứu: tạo chương trình Chat với tính gởi nhận tin nhắn dạng text users với dạng riêng tư nhóm, mã hóa giải mã thông tin trước truyền sau nhận nhằm đảm bảo tính riêng tư bảo mật truyền liệu Tất trình giám sát điều khiển Server Trong báo cáo em xin trình bày theo kết cấu: Chƣơng I: CƠ SỞ LÝ THUYẾT VÀ ỨNG DỤNG Tìm hiểu lập lập trình Socket ngơn ngữ C#, đưa nhìn tổng quan sở lý thuyết chủ đạo trình xây dựng chương trình Tìm hiểu ứng dụng hệ mã hóa cơng khai RSA q trình mã hóa thơng tin trước truyền Chƣơng II: PHÂN TÍCH VÀ THIẾT KẾ CHƢƠNG TRÌNH Đưa bước phân tích từ nghiên cứu thực tế người sử dụng vận dụng sở lý thuyết việc trình xây dựng chương trình Đề giải pháp bước phân tích nhằm xây dựng chương trình cách khoa học Chƣơng III: CÀI ĐẶT VÀ SỬ DỤNG CHƢƠNG TRÌNH Là cách hướng dẫn người sử dụng phương pháp cài đặt chương trình, yêu cầu hệ thống phương pháp sử dụng chương trình LỜI CẢM ƠN Bằng nổ lực kiên trì học hỏi trình t h ự c h i ệ n kh ó a l u ậ n , em hoàn thành đề tài “Viết chương trình trị chuyện đơn giản ngơn ngữ lập trình C#” với hướng dẫn Thầy Ngơ Đình Thưởng Em xin chân thành cảm ơn Thầy Ngơ Đình Thưởng hướng dẫn em thực khóa luận tốt nghiệp Thầy nhiệt tình hướng dẫn giải đáp thắc mắc trình thực khóa luận Em xin chân thành gởi lời cảm ơn đến Thầy Cô khoa Tin học, Anh chị bạn giúp đỡ suốt q trình thực khóa luận tốt nghiệp Cuối xin chúc quý Thầy cô, Anh chị bạn sức khỏe công tác tốt! Đà Nẵng, ngày 15 tháng 05 năm 2013 Sinh viên thực Nguyễn Văn Xuân NHẬN XÉT CỦA GIÁO VIÊN HƢỚNG DẪN ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… Đà Nẵng, ngày tháng năm 2013 Giáo viên hƣớng dẫn Ngơ Đình Thưởng Chƣơng 1: CƠ SỞ LÝ THUYẾT VÀ ỨNG DỤNG 1.1 Sơ lược lập trình Socket 1.1.1 Khái niệm IPAddress Port Nguyên lý: Trong máy có nhiều ứng dụng muốn trao đổi với ứng dụng khác thông qua mạng (VD: Có ứng dụng máy A muốn trao đổi với ứng dụng máy B) Mỗi máy tính có đường truyền liệu (để gửi nhận liệu cho nhau) Vấn đề: Rất xảy "nhầm lẫn" liệu từ máy A gửi đến máy B khơng biết liệu gửi cho ứng dụng máy B? Trong trình truyền nhận liệu xảy lỗi làm mát sai lệch liệu Giải quyết: Mỗi ứng dụng máy B gán số hiệu (gọi cổng Port), số hiệu cổng từ 65535 Khi ứng dụng máy A muốn gửi cho ứng dụng máy B 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, ứng dụng việc kiểm tra giá trị cổng gói tin xem có trùng với số hiệu cổng (đã gán – giá trị Localport) hay khơng? Nếu xử lý, cịn trái lại khơng làm Như cần trao đổi liệu cho hai ứng dụng cần phải biết thơng tin tối thiểu địa IP (IP Address) số hiệu cổng (Port) ứng dụng 1.1.2 Lớp IPAddress IPAddress : lớp dùng để mô tả địa IP, lớp sử dụng nhiều phương thức Socket Một số phương thức lớp IPAddress Phƣơng thức: Equals: So sánh địa IP GetHashCode: Lấy giá trị hash cho đối tượng IPAddress GetType: Trả kiểu thể địa IP HostToNetworkOrder: Chuyển địa IP từ host byte order thành network dy order IsLoopBack Cho biết địa IP có phải địa LoopBack hay không 1.1.3 Lớp IPEndPoint IPEndPoint một lớp đối tượng mô tả kết hợp địa IP Port Đối tượng lớp IPEndPoint dùng để gắn kết Socket với địa cục địa từ xa Hai thuộc tính IPEndPoint dùng để lấy vùng port hệ thống MinPort MaxPort 1.1.4 Lập trình Socket hƣớng kết nối(TCP) Trong lập trình Socket hướng kết nối, giao thức TCP dùng để thành lập phiên làm việc hai EndPoint Khi sử dụng giao thức TCP để thành lập kết nối ta phải đàm phán kết nối trước kết nối thành lập liệu truyền thiết bị cách tin tưởng Để lập trình Socket hướng kết nối ta phải thực loạt thao tác Client Server mơ hình bên Hình 1.1 Lập trình socket hướng kết nối (TCP) Sử dụng C# Stream với TCP: Điều khiển thông điệp dùng giao thức TCP thường gây khó khăn cho lập trình viên nên NET Framework cung cấp số lớp để giảm gánh nặng lập trình Một lớp NetworkStream, lớp dùng để gởi nhận Text sử dụng giao thức TCP StreamWriter StreamReader Lớp NetworkStream nằm namespace System.Net.Sockets, lớp có nhiều phương thức tạo lập để tạo thể lớp NetworkStream phương thức tạo lập sau hay dùng nhất: Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.TCP); NetworkStream ns = new NetworkStream(server); Namespace System.IO chứa lớp StreamReader StreamWriter điều khiển việc đọc ghi thông điệp text từ mạng Cả lớp triển khai với đối tượng NetworkStream để xác định hệ thống đánh dấu cho thông điệp TCP Lớp StreamReader có nhiều phương thức tạo lập, phương thức tạo lập đơn giản lớp StreamReader : public StreamReader(Stream stream); Biến stream tham chiếu đến kiểu đối tượng Stream kể đối tượng NetworkStream Có nhiều phương thức thuộc tính dùng với đối tượng StreamReader sau tạo Tương tự đối tượng StreamReader, đối tượng StreamWriter tạo từ đối tượng NetworkStream: public StreamWriter(Stream stream); StreamWriter có nhiều phương thức thuộc tính kết hợp với nó, số phương thức thuộc tính lớp StreamReader có đối tượng StreamWrite 1.1.5 Lập trình Socket phi kết nối(UDP) Các Socket phi kết nối cho phép gởi thông điệp mà không cần phải thiết lập kết nối trước Một phương thức đọc toàn thông điệp gởi phương thức gởi, điều làm tránh rắc rối, phức tạp với biên liệu Thật không may mắn giao thức phi kết nối UDP không đảm bảo liệu truyền tới đích Nhiều yếu tố mạng bận, mạng bị ngắt kết nối chừng ngăn cản } Xử lý request: CONNECT: Client kết nối đến gởi yêu cầu kết nối đến Server, nhận request Server thêm Client danh sách để quản lý Đồng thời gởi thông tin cập nhật đến Client khác CHAT: nhận Client gởi tin nhắn đến Client khác, nhận request Server thêm địa người gởi vào tin nhắn để chuyển tiếp đến đích cần gởi REQUESTUSERS: nhận yêu cầu từ Client muốn gởi cập nhật lại danh sách bạn bè Lúc Server cập nhật lại danh sách Client cho tất Client BUZZ: Client muốn gây ý cho người khác Server xác định người gởi chuyển đến Client tương ứng 2.1.4.3 Quá trình xử lý Client Client chương trình cung cấp cho người sử dụng Client hoạt động dựa vào trình gởi nhận request từ Server, với request có phương thức xử lý riêng Khi nhận thơng tin từ Server, Client phân tích thơng tin để lấy yêu cầu Server đáp ứng lại yêu cầu Client nhận request sau: private void ProcessCommands(string strMessage) { string[] dataArray; dataArray = strMessage.Split((char)124); switch (dataArray[0]) { case "JOIN": DisplayText("Bạn đăng nhập thành công." + (char)13 + (char)10); break; case "CHAT": string data = dataArray[1]; if (dataArray[1].Substring(0, (11))== "Thông báo: "); { listUser.Items.Clear(); SendData("REQUESTUSERS"); } if (dataArray[1].Substring(0, 8) == "Chú ý:" || dataArray[1].Substring(0, 11) == "Thông báo: ") DisplayText(dataArray[1] + (char)13 + (char)10); else { string subStringDesPr = data.Substring(data.Length (user + "encrypt").Length,(user +"encrypt").Length); String subStringDesPr1 = data.Substring(data.Length user.Length, user.Length); string subStringSou = data.Substring(0,str.Length); string subStringDesP = data.Substring(data.Length ("noname" + "encrypt").Length, ("noname" + "encrypt").Length); string subStringDesP1 = data.Substring(data.Length "noname".Length, "noname".Length); string subEncryp = data.Substring(data.Length – "encrypt".Length, "encrypt".Length); if (subStringDesPr == (user + "encrypt") ||subStringDesPr1 == user) { if (subStringSou == str) { if (subStringDesPr ==(user + "encrypt")) txtDiplay1.AppendText(getString( data.Substring(0, data.Length – (user + "encrypt").Length)) + (char)13 + (char)10); if (subStringDesPr1 == user) txtDiplay1.AppendText(data.Substring (0, data.Length - user.Length) + (char)13 + (char)10); } else { if (subStringDesPr==(user + "encrypt")) txtDisplayPrivate.AppendText(getString( data.Substring(0, data.Length – (user + "encrypt").Length)) + (char)13 + (char)10); if (subStringDesPr1 == user) txtDisplayPrivate.AppendText( data.Substring(0, data.Length – user.Length) + (char)13 + (char)10); } } else if (subStringDesP == ("noname" + "encrypt") || subStringDesP1 == "noname") { if (subStringDesP == ("noname" + "encrypt")) { DisplayText(getString(data.Substring(0, data.Length - ("noname" + "encrypt").Length)) + (char)13 + (char)10); } if (subStringDesP1 == "noname") { DisplayText(data.Substring(0, data.Length - "noname".Length) + (char)13 + (char)10); } if (str != "noname") { this.sttMessege.ForeColor = System.Drawing.Color.Maroon; sttMessege.Text = "New messages from the Room Chat"; } } } break; case "LISTUSERS": ListUsers(dataArray); break; case "BROAD":DisplayText("Máy chủ: " + dataArray[1] + (char)13 + (char)10);break; case "DELETEUSER": try { string myuser, a; myuser = dataArray[1]; a = myuser.Trim(); if (a == user) { MessageBox.Show("Server bị gián đoạn.Mất kết nối", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); SendData("DISCONNECT"); this.Dispose(); } } catch { } break; case "BUZZ": string data1 = dataArray[1]; string subString = data1.Substring(data1.Length – user.Length, user.Length); string subStringSou1 = data1.Substring(0,str.Length); if (subString == user) { Buzz(); if (subStringSou1 == str) txtDiplay1.AppendText("BUZZ!!!" + (char)13 + (char)10); else txtDisplayPrivate.AppendText(data1.Substring(0, data1.Length - user.Length) + "BUZZ!!" + (char)13 + (char)10); } break; } } Xử lý request : JOIN : Khi Client nhận thông báo từ Server kết nối thành công CHAT: Khi Client nhận thơng báo tức có người gởi tin nhắn đến Quá trình xử lý tin nhắn phức tạp tin nhắn cịn mang thơng điệp khác xác định đích đến, thơng tin đánh dấu mã hóa, người gởi… Cho nên q trình phân tích tin nhắn phức tạp DELETEUSER:Yêu cầu từ Server phải ngắt kết nối LISTUSERS: Khi nhận thông báo tức Server gởi FriendList tới BROAD : Khi nhận thông báo tức có lời nhắn từ Server BUZZ: chuyển gây ý từ Client khác mà Server gởi tới Khi Client gọi lại ham Buzz() để tạo hiệu ứng rung chuyển form hình với tốc đọ nhanh private void Buzz() { int currentX = this.Location.X; int currentY = this.Location.Y; int sleepTime = 10; int width = 3; this.TopMost = true; this.Activate(); for (int i = 0; i < 4; i++) { this.Left = currentX - width; this.Top = currentY width; System.Threading.Thread.Sleep(sleepTime); this.Left = currentX + width; this.Top = currentY width; System.Threading.Thread.Sleep(sleepTime); this.Left = currentX + width; this.Top = currentY + width; System.Threading.Thread.Sleep(sleepTime); this.Left = currentX - width; this.Top = currentY + width; System.Threading.Thread.Sleep(sleepTime); this.Left = currentX; this.Top = currentY; } this.TopMost = false; this.Activate(); } 2.2 Thiết kế 2.2.1 Thiết kế Server 2.2.1.1 Giao diện: Giao diện Server thiết kế đơn giản, linh hoạt nên dể dàng sử dụng trình quản lý Giao diện tùy biến chọn dạng thu gọn mở rộng Giao diện thu gọn hình 2.4: Hình 2.4 Giao diện Server thu gọn Giao diện giúp làm đơn giản nhỏ gọn phương thức quản lý Server Ở giao diện Hình 2.4 Server có chức năng: Click nút khởi động Server chuyển qua trạng thái sẵn sàng kết nối Click nút Click nút mở rộng cửa sổ thu cửa taskbar Giao diện mở rộng Server hình 2.5 a b: Hình 2.5.a: Giao diện Server mở rộng chưa kết nối Hình 2.5.b: Giao diện Server mở rộng có kết nối Giao diện hiển thị chi tiết thông tin trạng thái Client kết nối hệ thơng mạng hành 2.2.1.2 Q trình xử lý Với thiết kế đơn giản linh hoạt Chương trình Server cầu nối trung gian để kết nối Client lại với Server cịn quản lý kết nối, giúp đảm bảo trình truyền nhận ổn định Server nơi lưu giữ thông tin trạng thái Client hoạt động 2.2.2 Thiết kế Client 2.2.2.1 Giao diện: Giao diện Client thiết kế cách khoa học thuận tiện cho q trình sử dụng Có thể sử dụng cách dể dàng, đơn giản Với hiệu ứng chuyển trang bắt mắt thao tác tạo cảm giác thích thú cho người sử dụng Giao diện thiết kế sau : Giao diện đăng nhập hình 2.6: Hình 2.6 Giao diện Client đăng nhập Giao diện đăng nhập form với textBox để nhập Username dùng để định danh trình kết nối Sau đăng nhập trở giao diện hình 2.7: Hình 2.7 Giao diện Client thu gọn Trên giao diện có menu chính, button điều khiển danh sách bạn bè Trong trình gởi tin nhắn tùy biến giao diện theo nhiều cách Giao diện room chat, private chat, có tin nhắn riêng tư từ client gởi tới: Trên giao diện Hình 2.7 có chức sau: Tại Listbox có tên File: Logout thoát để đăng nhập lại Username khác; Exit tắt cửa sổ ẩn taskbar, Dispose hồn tồn tắt cửa sổ Tại Listbox có tên Driver: Zom (Zom in mở rộng sổ Chat Rom Zom out ngược lại); Public mở cửa sổ chat Rom; Right mở cửa sổ hiển thị tin nhắn riêng tư ngược lại left Giao diện Chat room hình 2.8: Hình 2.8 Giao diện Client Chat room Là giao diện thiết kế để thực trình gởi tin nhắn đến tất client kết nối hệ thông mạng cục Khi thao tác giao diện việc có người mạng gởi tin nhắn tới client hiển thị khung tin nhắn riêng tư Q trình thực hình bên Giao diện có tin nhắn riêng tư từ client khác gởi tới hình 2.9 Hình 2.9 Giao diện Client tin nhắn riêng tư Như thấy hình có người(Vũ Hồ)gởi tin nhắn đến(Xn Nguyễn) mà ta khơng chọn chức chat với người hiển thị khung tin nhắn riêng tư Còn chọn chức chat với người tin nhắn hiển thị khung Chat chung Trên giao diện chọn chức thu gọn phần tin nhắn để giao diện đơn giản Giao diện Chat riêng tư hình 2.10: Hình 2.10: Giao diện Client Chat riêng tư Ở giao diện trình gởi thông tin riêng tư client diển đây, chọn chức mã hóa(encrypt) trước tin nhắn gởi để đảm bảo tính riêng tư đảm bảo tính bảo mật tốt 2.2.2.2 Quá trình xử lý: Ở Client thông điệp nhận từ Server xử lý cách hợp lý với thao tác gởi đến request tới Server để Server đáp ứng lại yêu cầu 2.3 Cài đặt sử dụng chương trình Chương trình thiết kế với mục đích hoạt động hệ thơng mạng cục nên u cầu q trình cài đặt sử dụng phải đảm bảo tính thơng suốt mạng hệ thống Chương trình thiết kế ngôn ngữ C# với công cụ Visual Studio 2010 nên yêu cầu hệ thống phải cài tảng Net framework 3.5 trở lên Chương trình hoạt động nhẹ nhàng nên việc yêu cầu cấu hình phần cứng không cao Với thiết kế giao diện thân thiện nên việc sử dụng đơn giản Thuận tiện tất người sử dụng, việc nắm bắt trình xử lý chương trình giúp người dùng hiểu thao tác chương trình xác KẾT LUẬN Kết đạt đƣợc Đề tài “Viết chương trình Chat đơn giản ngơn ngữ lập trình C#” thực nội dung sau: Tìm hiểu nắm cách thức lập trình Socket lập trình đa luồng mơi trường NET Tìm hiểu cách thức hoạt động chương trình Chat đơn giản Biết chức cần thiết chương trình chat đơn giản Xây dựng chương trình Chat đơn giản cài đặt mạng Lan với số tính như: gởi tin nhắn trực tiếp Users, tạo danh sách bạn bè, chat nhóm Chat, q trình chat mã hóa thông tin Hƣớng phát triển Về bản, nghiên cứu đạt yêu cầu đặt Tuy nhên có điều kiện, em cố gắng phát triển thêm chức sau: Hỗ trợ gởi hình ảnh Chat Hỗ trợ chức gởi file Hỗ trợ chức Voice Chat Webcam Cải tiến giao diện thân thiện Xây dựng CSDL lưu trữ về: Thông tin người dùng, nội dung tin nhắn DANH MỤC TÀI LIỆU THAM KHẢO Tài liệu: Giáo trình “Mạng Máy Tính” , khoa Tin Học ĐH Sư Phạm Giáo trình “Lập Trình Chuyên Nâng Cao”, Tác Giả: Trần Uyên Trang Giáo trình “Truyền Và Bảo Mật Thơng Tin”, Lê Thị Bích Hồng Dương Quang Thiện, 2005, NET tồn tập Nguyễn Ngọc Bình Phương, 2005, Các giải pháp lập trình C# Mai Lam, 2010, Giáo trình lập trình ứng dụng mạng Website: http://congdongcviet.com http://congdongcsharp.com/ http://www.csharpvn.com/KienThuc_Default.aspx http://vi.wikipedia.org ... đặt chương trình, yêu cầu hệ thống phương pháp sử dụng chương trình LỜI CẢM ƠN Bằng nổ lực kiên trì học hỏi trình t h ự c h i ệ n kh ó a l u ậ n , em hồn thành đề tài ? ?Viết chương trình trị chuyện. .. dựng thành công chương trình Chat đáp ứng nhu cầu cần thiết làm phong phú thêm phương thức trao đổi trò chuyện chương trình Chat Với lý đặt thế, việc nghiên cứu xây dựng nên chương trình Chat phải... SƠ ĐỒ Hình 1.1 Lập trình socket hướng kết nối (TCP) .6 Hình 1.2 Lập trình socket phi kết nối (UDP) Hình 1.3 Kết chương trình đồng hóa 18 Hình 1.4 Kết chương trình bất đồng