Sự giao tiếpngày càng được mở rộng, không còn giới hạn ở mỗi vùng miền, quốc gia, hay lục địa.Cùng với đó là sự phát triển về công nghệ thông tin cũng như cầu sử dụng ứng dụnggiao tiếp n
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
ĐỒ ÁN CƠ SỞ 4
ĐỀ TÀI: ỨNG DỤNG MESSENGER
SỬ DỤNG TCP/IP SOCKET
Giảng viên hướng dẫn : THS NGUYỄN ĐỖ CÔNG PHÁP
Đà Nẵng, tháng 01 năm 2021
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
Trang 2ĐỒ ÁN CƠ SỞ 4
ĐỀ TÀI: ỨNG DỤNG MESSENGER
SỬ DỤNG TCP/IP SOCKET
Đà Nẵng, tháng 01 năm 2021
Trang 3MỞ ĐẦU
Giao tiếp là yếu tố đảm bảo cho sự tồn tại và phát triển của xã hội, là tập hợpnhững mối quan hệ giữa con người với con người tác động qua lại với nhau Xã hội sẽkhông thể tồn tại khi con người không có mối quan hệ gắn bó với nhau Sự giao tiếpngày càng được mở rộng, không còn giới hạn ở mỗi vùng miền, quốc gia, hay lục địa.Cùng với đó là sự phát triển về công nghệ thông tin cũng như cầu sử dụng ứng dụnggiao tiếp ngày càng tăng cao dẫn đến việc cần thiết tạo ra những ứng dụng giao tiếp.Với ứng dụng giao tiếp, cụ thể ở đây là trò chuyện, nhắn tin, lập trình Socket vớigiao thức TCP/IP đảm bảo cho việc truyền thông tin một cách đáng tin cậy và đúngthứ tự Chính vì lý do trên nên em quyết định chọn đề tài “ỨNG DỤNGMESSENGER SỬ DỤNG TCP/IP SOCKET”
Trang 4LỜI CẢM ƠN
Để hoàn thành bài đồ án này, em đã nhận được sự hỗ trợ, giúp đỡ của các thầy côtrong nhà trường Em xin bày tỏ long biết ơn sâu sắc đến tất cả quý thầy cô đã dạy dỗ,tạo điều kiện giúp đỡ em trong quá trình phát triển và hoàn thành đề tài
Đặc biệt em xin chân thành cảm ơn thầy Nguyễn Đỗ Công Pháp - giảng viên
hướng dẫn môn Đồ án cơ sở 4 đã quan tâm giúp đỡ và chỉ dạy em trong quá trình thựchiện đề tài trong thời gian qua Bài báo cáo của em sẽ không thể hoàn thành tốt nếukhông có sự hướng dẫn tận tình của giáo viên hướng dẫn
Vì kinh nghiệm và kiến thức chuyên ngành còn hạn chế nên đồ án này không thểtránh khỏi những thiếu sót, hạn chế Em rất mong nhận được sự chỉ bảo, đóng góp ýkiến của quý thầy cô để em có thể bổ sung kiến thức và hoàn thiện các kỹ năng củamình hơn
Một lần nữa cho phép em xin chân thành cảm ơn các thầy giáo, cô giáo khoa Khoahọc máy tính đã tận tình dạy dỗ, giúp đỡ để em có thể hoạn thành bài Đồ án cơ sở 4này!
Trang 5NHẬN XÉT (Của giảng viên hướng dẫn)
1 Tinh thần thái độ của sinh viên trong quá trình làm đề tài:
2 Đánh giá chất lượng của đề tài (so với nội dung yêu cầu đã đề ra trong nhiệm vụ đề tài):
Ngày… tháng… năm 2021 GIẢNG VIÊN HƯỚNG DẪN (Ký, ghi rõ họ tên)
Trang 6
MỤC LỤC Trang MỞ ĐẦU 3
Chương 1 Giới thiệu 10
1.1 Tổng quan 10
1.2 Mục tiêu 10
1.3 Phương pháp, ngôn ngữ và công cụ 10
Chương 2 Nghiên cứu tổng quan 11
2.1 Các phương pháp 11
2.1.1 Socket là gì? 11
2.1.2 Giao thức TCP/IP là gì? 11
2.1.3 Giao thức UDP là gì? 12
2.2 Ngôn ngữ lập trình Java và Platform JavaFX 12
2.2.1 Ngôn ngữ lập trình Java 12
2.2.2 Platform JavaFX 16
2.3 Công cụ lập trình và Quản trị cơ sở dữ liệu 16
2.3.1 IntelliJ IDEA 16
2.3.2 Scene Builder 2.0 16
2.3.3 Quản trị cơ sở dữ liệu 17
2.4 Hạn chế, tồn tại của các phương pháp 18
2.5 Kết luận 18
Chương 3 Phân tích thiết kế hệ thống 19
3.1 Mô hình Client-Server 19
3.2 Phân tích thiết kế hệ thống 20
3.2.1 Xác định các tác nhân (Actor): 20
3.2.2 Xác định các trường hợp sử dụng: 20
3.2.3 Đặc tả các trường hợp sử dụng 21
3.3 Thiết kế Cơ sở dữ liệu 27
3.3.1 Bảng User 27
3.3.2 Bảng Danh sách tất cả cuộc trò chuyện 27
3.3.3 Bảng Danh sách tất cả tin nhắn 28
3.3.4 Bảng thông tin Server 28
3.4 Sự liên kết giữa các bảng 29
Chương 4 Triển khai xây dựng 31
4.1 Cài đặt 31
4.2 Demo 33
Chương 5 Kết luận và Hướng phát triển 35
5.1 Kết luận 35
5.2 Hướng phát triển 35
DANH MỤC TÀI LIỆU THAM KHẢO 36
Trang 7DANH MỤC CÁC BẢNG
Trang
Bảng 1 So sánh TCP và UDP 18
Bảng 2 Sự kiện đăng ký 21
Bảng 3 Biểu đồ Use case Đăng ký 22
Bảng 4 Sự kiện đăng nhập 23
Bảng 5 Biểu đồ Use case Đăng nhập 23
Bảng 6 Sự kiện tạo cuộc trò chuyện 25
Bảng 7 Xóa cuộc trò chuyện 25
Bảng 8 user 27
Bảng 9 list_convo 28
Bảng 10 messages 28
Bảng 11 server_running 29
Trang 8DANH MỤC HÌNH
Trang
Hình 1 Socket trong mô hình tham chiếu có kiến trúc phân tầng 11
Hình 2 Java 13
Hình 3 Quá trình biên dịch trong Java 14
Hình 4 Biểu đồ Use Case tổng quan 21
Hình 5 Use case Thay đổi thông tin cá nhân 24
Hình 6 User case Tạo cuộc trò chuyện 25
Hình 7 Use case Xóa cuộc trò chuyện 26
Hình 8 Sự liên kết giữa bảng user và bảng messages 29
Hình 9 Sự liên kết giữa bảng list_convo và bảng messages 30
Hình 10 Giao diện làm việc Intellij IDEA 31
Hình 11 Giao diện làm việc Scene Builder 2.0 31
Hình 12 Giao diện Xampp 32
Hình 13 Giao diện làm việc Navicat 32
Hình 14 Server running 33
Hình 15 Có Client kết nối 33
Hình 16 Giao diện đăng ký và đăng nhập 34
Hình 17 Giao diện Client 34
Trang 9DANH MỤC CỤM TỪ VIẾT TẮT
Trang 10Chương 1 Giới thiệu
1.1 Tổng quan
Việc giao tiếp trong cuộc sống con người là một điều cần thiết và cực kỳ quantrọng Có giao tiếp, xã hội mới có thể phát triển Bên cạnh đó, nhiều nhu cầu khác củacon người như nhu cầu được quan tâm, nhu cầu thông tin, nhu cầu được hòa nhập, nhucầu được thừa nhận,… chỉ được thỏa mãn trong quá trình giao tiếp Hãy thử hìnhdung xem, bản thân sẽ như thế nào nếu tự giam mình trong phòng một ngày, khônggiao tiếp với bất cứ ai, không dùng điện thoại, tivi, máy tính?
Đặc biệt là trong năm 2020 vừa rồi đại dịch COVID-19 bùng phát đã khiến rấtnhiều người phải ở nhà, nó càng khiến cho nhu cầu sử dụng ứng dụng giao tiếp tăngrất cao
Chính vì yếu tố trên cũng như mong muốn thử thách bản thân, mong muốn tạo ramột ứng dụng giao tiếp trên desktop cũng như muốn hiểu thêm về Socket trong Javanên em quyết định xây dựng ứng dụng messenger với TCP/IP socket
1.2 Mục tiêu
- Xây dựng thành công ứng dụng messenger cho phép người dùng giao tiếp vớinhau, giao tiếp 1-1 và 1-n(group chat)
- Người dùng có thể gửi văn bản, ảnh, file, hoặc sticker cho nhau
1.3 Phương pháp, ngôn ngữ và công cụ
Trang 11Chương 2 Nghiên cứu tổng quan
2.1 Các phương pháp
2.1.1 Socket là gì?
Trong hệ thống mạng máy tính tồn tại những mô hình tham chiếu có kiến trúcphần tầng (OSI, TCP/IP…) nhằm hỗ trợ chức năng trao đôi thông tin giữa các ứngdụng ở nhiều máy tính khác nhau
Hình 1 Socket trong mô hình tham chiếu có kiến trúc phân tầng
Dữ liệu bên gửi sẽ được đóng gói (Encapsulation) từ tầng trên đến tầng cuối làtầng vật lí (Physical Layer), sau đó nhờ tầng vật lí này chuyển dữ liệu đến tầng vật límáy bên nhận, bên nhận tiến hành giải mã (decapsulation) gói dữ kiện từ tầng dướilên tầng trên cùng, là tầng ứng dụng (application layer)
Ở đây, Socket chính là cửa giao tiếp giữa tầng ứng dụng và tầng giao vận(Transport layer) Nói cách khác, Socket là giao diện do ứng dụng tạo ra trên máytrạm, quản lí bởi hệ điều hành qua đó các ứng dụng có thể gửi/nhận thông điệp đến/từcác ứng dụng khác Ở đó, Socket sẽ được ràng buộc với một mã số cổng (PortNumber) để giúp tầng giao vận định danh được ứng dụng nhận/gửi thông điệp [1]
2.1.2 Giao thức TCP/IP là gì?
TCP là giao thức truyền tải hướng kết nối (connection-oriented), nghĩa là phảithực hiện thiết lập kết nối với đầu xa trước khi thực hiện truyền dữ liệu Tiếntrình thiết lập kết nối ở TCP được gọi là tiến trình bắt tay 3 bước (threewayhandshake)
Cung cấp cơ chế báo nhận (Acknowledgement): Khi A gửi dữ liệu cho B, Bnhận được thì gửi gói tin cho A xác nhận là đã nhận Nếu không nhận được tinxác nhận thì A sẽ gửi cho đến khi B báo nhận thì thôi
Trang 12 Cung cấp cơ chế đánh số thứ tự gói tin (sequencing) cho các đơn vị dữ liệuđược truyền, sử dụng để ráp các gói tin chính xác ở điểm nhận và loại bỏ gói tintrùng lặp.
Có các cơ chế điều khiển luồng thích hợp (flow control) để tránh nghẽn xảy ra
Hỗ trợ cơ chế full-duplex (truyền và nhận dữ liệu cùng một lúc)
2.1.3 Giao thức UDP là gì?
Ngược lại với giao thức TCP thì UDP là giao thức truyền tải hướng không kếtnối (connectionless) Nó sẽ không thực hiện thao tác xây dựng kết nối trước khitruyền dữ liệu mà thực hiện truyền ngay lập tức khi có dữ liệu cần truyền (kiểutruyền best effort) => truyền tải rất nhanh cho dữ liệu của lớp ứng dụng
Không đảm bảo tính tin cậy khi truyền dữ liệu và không có cơ chế phục hồi dữliệu (nó không quan tâm gói tin có đến đích hay không, không biết gói tin có bịmất mát trên đường đi hay không) => dễ bị lỗi
Không thực hiện các biện pháp đánh số thứ tự cho các đơn vị dữ liệu đượctruyền
Nhanh và hiệu quả hơn đối với các dữ liệu có kích thước nhỏ và yêu cầu khắtkhe về thời gian
Bản chất không trạng thái nên UDP hữu dụng đối với việc trả lời các truy vấnnhỏ với số lượng lớn người yêu cầu
2.2 Ngôn ngữ lập trình Java và Platform JavaFX
2.2.1 Ngôn ngữ lập trình Java
a) Giới thiệu
Java là một trong những ngôn ngữ lập trình hướng đối tượng Nó được sử dụngtrong phát triển phần mềm, trang web, game hay ứng dụng trên các thiết bị di động.Java được khởi đầu bởi James Gosling và bạn đồng nghiệp ở Sun MicroSystemnăm 1991 Ban đầu Java được tạo ra nhằm mục đích viết phần mềm cho các sản phẩmgia dụng, và có tên là Oak
Java được phát hành năm 1994, đến năm 2010 được Oracle mua lại từ SunMicroSystem
Java được tạo ra với tiêu chí “Viết (code) một lần, thực thi khắp nơi” (Write
Once, Run Anywhere – WORA) Chương trình phần mềm viết bằng Java có thể chạytrên mọi nền tảng (platform) khác nhau thông qua một môi trường thực thi với điềukiện có môi trường thực thi thích hợp hỗ trợ nền tảng đó
Trang 13Hình 2 Java
b) Đặc điểm của ngôn ngữ lập trình Java
- Tương tự C++, hướng đối tượng hoàn toàn:
Trong quá trình tạo ra một ngôn ngữ mới phục vụ cho mục đích chạy được trênnhiều nền tảng, các kỹ sư của Sun MicroSystem muốn tạo ra một ngôn ngữ dễ học
và quen thuộc với đa số người lập trình Vì vậy họ đã sử dụng lại các cú pháp của
C và C++
Tuy nhiên, trong Java thao tác với con trỏ bị lược bỏ nhằm đảo bảo tính an toàn
và dễ sử dụng hơn Các thao tác overload, goto hay các cấu trúc như struct vàunion cũng được loại bỏ khỏi Java
- Độc lập phần cứng và hệ điều hành:
Một chương trình viết bằng ngôn ngữ Java có thể chạy tốt ở nhiều môi trườngkhác nhau Gọi là khả năng “cross-platform” Khả năng độc lập phần cứng và hệđiều hành được thể hiện ở 2 cấp độ là cấp độ mã nguồn và cấp độ nhị phân
Ở cấp độ mã nguồn: Kiểu dữ liệu trong Java nhất quán cho tất cả các hệ điềuhành và phần cứng khác nhau Java có riêng một bộ thư viện để hỗ trợ vấn đề này.Chương trình viết bằng ngôn ngữ Java có thể biên dịch trên nhiều loại máy khácnhau mà không gặp lỗi
Ở cấp độ nhị phân: Một mã biên dịch có thể chạy trên nhiều nền tảng khác nhau
mà không cần dịch lại mã nguồn Tuy nhiên cần có Java Virtual Machine để thôngdịch đoạn mã này
Trang 14Hình 3 Quá trình biên dịch trong Java
Ưu điểm: Phương pháp này giúp các đoạn mã viết bằng Java có thể chạy đượctrên nhiều nền tảng khác nhau Với điều kiện là JVM có hỗ trợ chạy trên nền tảngnày
Nhược điểm: Cũng như các ngôn ngữ thông dịch khác, quá trình chạy các đoạn
mã Java là chậm hơn các ngôn ngữ biên dịch khác (tuy nhiên vẫn ở trong một mứcchấp nhận được)
- Cơ chế thu gom rác tự động:
Khi tạo ra các đối tượng trong Java, JRE sẽ tự động cấp phát không gian bộnhớ cho các đối tượng ở trên heap
Với ngôn ngữ như C \ C++, bạn sẽ phải yêu cầu hủy vùng nhớ mà bạn đã cấpphát, để tránh việc thất thoát vùng nhớ Tuy nhiên vì một lý do nào đó, bạn khônghủy một vài vùng nhớ, dẫn đến việc thất thoát và làm giảm hiệu năng chươngtrình
Trang 15Ngôn ngữ lập trình Java hỗ trợ cho bạn điều đó, nghĩa là bạn không phải tự gọihủy các vùng nhớ Bộ thu dọn rác của Java sẽ theo vết các tài nguyên đã được cấp.Khi không có tham chiếu nào đến vùng nhớ, bộ thu dọn rác sẽ tiến hành thu hồivùng nhớ đã được cấp phát.
- Đa luồng:
Java hỗ trợ lập trình đa tiến trình (multithread) để thực thi các công việc đồngthời Đồng thời cũng cung cấp giải pháp đồng bộ giữa các tiến trình (giải pháp sửdụng priority…)
-Tính toán an toàn và bảo mật:
o Tính an toàn
- Ngôn ngữ lập trình Java yêu cầu chặt chẽ về kiểu dữ liệu
- Dữ liệu phải được khai báo tường minh
- Không sử dụng con trỏ và các phép toán với con trỏ
- Java kiểm soát chặt chẽ việc truy nhập đến mảng, chuỗi Không chophép sử dụng các kỹ thuật tràn Do đó các truy nhập sẽ không vượt quákích thước của mảng hoặc chuỗi
- Quá trình cấp phát và giải phóng bộ nhớ được thực hiện tự động
- Cơ chế xử lý lỗi giúp việc xử lý và phục hồi lỗi dễ dàng hơn
- Máy ảo Java (JVM – Java Virtual Machine):
Để đảm bảo tính đa nền, Java sử dụng cơ chế Máy ảo của Java.
ByteCode là ngôn ngữ máy của Máy ảo Java tương tự như các lệnh nhị phâncủa các máy tính thực
Trang 16mở rộng là class) Tập tin thực thi này chứa các chỉ thị dưới dạng mã Bytecode
mà máy ảo Java hiểu được phải làm gì
Khi thực hiện một chương trình, máy ảo Java lần lượt thông dịch các chỉ thịdưới dạng Bytecode thành các chỉ thị dạng nhị phân của máy tính thực và thực thithực sự chúng trên máy tính thực (còn gọi là khả năng khả chuyển)
Máy ảo thực tế đó là một chương trình thông dịch Vì thế các hệ điều hànhkhác nhau sẽ có các máy ảo khác nhau Để thực thi một ứng dụng của Java trênmột hệ điều hành cụ thể, cần phải cài đặt máy ảo tương ứng cho hệ điều hành đó.JVM cung cấp môi trường thực thi cho chương trình Java (còn gọi là khả năngđộc lập với nền)
Có nhiều JVM cho các nền tảng khác nhau chẳng hạn như: Windows, Liux, vàMac
2.2.2 Platform JavaFX
JavaFX được thiết kế để cung cấp cho các nhà phát triển Java với một nền tảng
đồ họa nhẹ, hiệu suất cao mới Mục đích là cho các ứng dụng mới để sử dụng JavaFXhơn Swing để xây dựng các ứng dụng giao diện người dùng đồ họa (GUI) Điều nàykhông có nghĩa là Swing đó là lỗi thời Số lượng lớn các ứng dụng được sử dụng đãđược xây dựng sử dụng Swing có nghĩa là nó sẽ trở thành một phần của Java API chomột thời gian dài được nêu ra Điều đặc biệt là các ứng dụng này có thể kết hợp chứcnăng JavaFX vì hai API đồ họa chạy song song nhau liền mạch
JavaFX có thể được sử dụng để tạo giao diện người dùng đồ họa cho bất kỳ nềntảng (ví dụ, máy tính để bàn, web, điện thoại di động, vv )
2.3 Công cụ lập trình và Quản trị cơ sở dữ liệu
Trang 172.3.3 Quản trị cơ sở dữ liệu
a) Xampp
Xampp là chương trình tạo máy chủ Web (Web Server) được tích hợp sẵnApache, PHP, MySQL, FTP Server, Mail Server và các công cụ nhưphpMyAdmin Không như Appserv, Xampp có chương trình quản lý khá tiện lợi,cho phép chủ động bật tắt hoặc khởi động lại các dịch vụ máy chủ bất kỳ lúc nào.Xampp là một mã nguồn mở máy chủ web đa nền được phát triển bởi ApacheFriends, bao gồm chủ yếu là Apache HTTP Server, MariaDB database, vàinterpreters dành cho những đối tượng sử dụng ngôn ngữ PHP và Perl Xampp làviết tắt của Cross-Platform (đa nền tảng-X), Apache (A), MariaDB (M), PHP (P)
và Perl (P) Nó phân bố Apache nhẹ và đơn giản, khiến các lập trình viên có thể dễdàng tạo ra máy chủ web local để kiểm tra và triển khai trang web của mình Tất cảmọi thứ cần cho phát triển một trang web - Apache (ứng dụng máy chủ), Cơ sở dữliệu (MariaDB) và ngôn ngữ lập trình (PHP) được gói gọn trong 1 tệp Xamppcũng là 1 đa nền tảng vì nó có thể chạy tốt trên cả Linux, Windows và Mac Hầuhết việc triển khai máy chủ web thực tế đều sử dụng cùng thành phần như XAMPPnên rất dễ dàng để chuyển từ máy chủ local sang máy chủ online
b) Phần mềm quản lý CSDL Navicat
Navicat Premium là một công cụ quản lý kết nối đa cơ sở dữ liệu Với các kếtnối thành lập cho các loại hình cơ sở dữ liệu khác nhau, Navicat Premium hỗ trợtruyền dữ liệu giữa MySQL, SQLite, Oracle và PostgreSQL Nó còn hỗ trợ hầu hếtcác tính năng trong MySQL, SQLite, Oracle và PostgreSQL bao gồm cảProcedure, Event, Trigger, Function
Nó cho phép người dùng kết nối đến các máy chủ localhost và remote,MySQL, PostgreSQL và Oracle, cung cấp một loạt các công cụ như chức năngquản lý cơ sở dữ liệu, xuất nhập dữ liệu, cũng như sao lưu và truyền dữ liệu Cácmáy chủ từ xa có thể chạy trên bất kỳ nền tảng Linux, Unix, MacOS X vàWindows
Trang 182.4 Hạn chế, tồn tại của các phương pháp
- So sánh TCP/IP và UDP
Hướng kết nối Hướng không kết nối
Độ tin cậy cao Độ tin cậy thấp
Gửi dữ liệu dạng luồng byte Gửi đi Datagram
Không cho phép mất gói tin Cho phép mất gói tin
Đảm bảo việc truyền dữ liệu Không đảm bảo việc truyền dữ liệu
Có sắp xếp thứ tự các gói tin Không sắp xếp thứ tự các gói tin
Tốc độ truyền thấp hơn UDP Tốc độ truyền cao
Bảng 1 So sánh TCP và UDP
2.5 Kết luận
Vì trong ứng dụng giao tiếp cụ thể ở đây là ứng dụng chat(trò chuyện), tin nhắnhoặc thông tin(từ người gửi) phải được gửi đến đúng đích(người nhận) và từ sự sosánh ở mục 2.4 bên trên nên ta có thể thấy việc sử dụng giao thức TCP/IP là tối ưunhất trong lập trình ứng dụng messenger