1. Trang chủ
  2. » Luận Văn - Báo Cáo

ĐỒ án lập TRÌNH MẠNG ỨNG DỤNG CHAT và gửi FILE

29 3 0

Đ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

Thông tin cơ bản

Tiêu đề Đồ Án Lập Trình Mạng Ứng Dụng Chat Và Gửi File
Tác giả Nguyễn Trung Thành, Nguyễn Văn Quang, Đào Nhật Tín, Nguyễn Đình Hùng
Người hướng dẫn Nguyễn Lê Văn
Trường học Trường Đại Học Công Nghệ Tp. Hcm
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đồ án
Năm xuất bản 2022
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 29
Dung lượng 1,9 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HCM ĐỒ ÁN LẬP TRÌNH MẠNG ỨNG DỤNG CHAT VÀ GỬI FILE Ngành: CÔNG NGHỆ THÔNG TIN Chuyên ngành: CÔNG NGHỆ PHẦN MỀM Giảng viên hướng dẫn : NGUYỄN LÊ VĂN Sinh viên thực hiện: Họ tên Nguyễn Trung Thành Nguyễn Văn Quang Đào Nhật Tín Nguyễn Đình Hùng MSSV 1911065665 1911064960 1911061039 1911064815 TP Hồ Chí Minh, 10/2022 0 Lớp 19DTHC5 19DTHC5 19DTHC5 19DTHC5 MỤC LỤC LỜI MỞ ĐẦU lỜI CẢM ƠN CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Yêu cầu đề tài: 1.2 Giới thiệu mơ hình Client/Server: .5 1.3 Giới thiệu giao thức IP/TCP: .6 1.3.1 Giới thiệu TCP 1.3.2 Giới thiệu IP 1.3.3 Giới thiệu cổng Port .6 1.3.4 Giới thiệu Socket 1.4 Lập trình mạng Java: 1.4.1 Gói ServerSocket 1.4.2 Gói Socket .8 1.4.3 Một số gói , lớp bổ trợ khác CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH 2.1 Phân tích yêu cầu : 2.2 Phân tích chức : 2.2.1 Trên Client 2.2.2 Trên Server 2.3 Phân tích thiết kế chương trình: 10 CHƯƠNG 3: TRIỂN KHAI VÀ KẾT QUẢ 11 3.1 Môi trường triển khai: 11 3.2 Kết quả: 11 3.3 Chương trình: 14 3.3.1 Cấu trúc chương trình .14 3.3.2 Chương trình máy Server 14 3.3.3 Chương trình máy Client 21 CHƯƠNG 4: PHÂN CÔNG , ĐÁNH GIÁ .28 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE LỜI MỞ ĐẦU Hiện mạng internet toàn cầu phát triển mạnh, đáp ứng tốt nhu cầu thông tin khoa học, giải trí, liên lạc, mua bán, quảng cáo v.v người Internet trở thành thành phần thiếu với sống đại Về chất, Internet chẳng qua hệ thống mạng, liên kết máy tính tồn giới lại theo chuẩn chung Với phạm vi nhỏ tương tự, có mạng khác WAN, LAN , mơ hình ứng dụng nhiều tiện ích khác Với mục tiêu sinh viên trường với kiến thức tốt mạng, lập trình ứng dụng mạng để làm nhiều việc khác nhau, mơn lập trình mạng đời Vì vậy, ngày hơm nay, lúc nhóm chúng em học lập trình mạng, tìm đề tài với tên “ỨNG DỤNG CHAT VÀ GỬI FILE”, điều giúp nhóm chúng em thực hành để có hội hiểu rõ mạng, lập trình mạng – lĩnh vực lập trình thú vị Ứng dụng hoạt động dựa vào giao thức IP/TCP để truyền liệu hai máy khác nhau, cụ thể máy server để cung cấp dịch vụ nhiều máy client sử dụng dịch vụ máy server cung cấp người dùng sử dụng Ngơn ngữ lập trình ngơn ngữ Java (Phiên JAVA SE 8) Java ngơn ngữ sử dụng để viết ứng dụng chạy hầu hết thiết bị (ở ta quan tâm tới thiết bị có hỗ trợ mạng) Trọng điểm, có khả trội Java cung cấp mà ta sử dụng : - Lập trình đa tuyến trình (Cùng ứng dụng chạy nhiều tiến trình song song với thay phải tiến trình đợi tiến trình kết thúc thực hiện) - Java tảng chạy nhiều loại thiết bị với nhiều hệ điều hành khác nên có phạm vi ứng dụng rộng rãi 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE LỜI CẢM ƠN Để hoàn thành tốt đồ án lần chúng em xin chân thành cảm ơn thầy Nguyễn Lê Văn hướng dẫn chúng em suốt q trình mơn học q trình làm đồ án lần Bên cạnh để hồn thành đồ án lần chúng em nhận nhiều hỗ trợ bạn bè quý thầy cô Nhưng điều kiện thời gian, chúng em khó bỏ qua thiếu sót Chúng em mong nhận thông cảm quý thầy góp ý, bảo quý thầy cô để sản phẩm trở nên tốt Chúng em xin chân thành cảm ơn! 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Yêu cầu đề tài: Viết chương trình Client/Server cho phép nhiều người sử dụng gửi tin nhắn cho dạng phịng chat room có thêm chức gửi file 1.2 Giới thiệu mơ hình Client/Server: Server hiểu máy chủ, thường hệ thống máy lớn, có xử lý mạnh, có khả hoạt động đáng tin cậy, có khả lưu trữ liệu lớn, chuyên quản lý tài nguyên (chủ yếu sở liệu), cung cấp dịch vụ mạng cho máy khách (client) sử dụng Bình thường chạy suốt thời gian thực sẵn sàng chấp nhận yêu cầu kết nối yêu cầu dịch vụ khác từ máy khách (Client) Client máy khách, thường sử dụng người dùng cuối Nó hoạt động dựa việc sử dụng dịch vụ mà máy server cung cấp để thực công việc mà người dùng cuối mong muốn Quy trình hoạt động mơ hình lặp lại trình sau : - Client gửi yêu cầu lên server - Server nhận yêu cầu xử lý phản hồi lại client 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE Mơ hình Client/Server 1.3 Giới thiệu giao thức IP/TCP: 1.3.1 Giới thiệu TCP Giao thức TCP (Transmission Control Protocol) giao thức hướng kết nối (connection-oriented), đòi hỏi thiết lập kết nối trước bắt đầu gửi liệu kết thúc kết nối việc gửi liệu hoàn tất theo thứ tự: thiết lập kết nối, truyền liệu kết thúc kết nối 1.3.2 Giới thiệu IP IP địa máy tính mạng, dựa vào địa IP giao thức TCP truyền liệu xác từ máy qua máy thông qua hệ thống mạng Ở mạng, máy tính sẻ có địa IP khác nhau, từ địa IP biết máy mạng ngược lại 1.3.3 Giới thiệu cổng Port Với IP, giao thức TCP truyền liệu xác từ máy qua máy mà chưa thể truyền xác đến ứng dụng máy Hiện nay, hệ thống máy thông thường hoạt động theo chế độ đa nhiệm, nghĩa có nhiều ứng dụng chạy lúc có nhiều ứng dụng sử dụng dịch vụ mạng Yêu cầu, máy chủ A truyền liệu cho ứng dụng u máy B máy B phải đảm bảo liệu phải đến ứng dụng u, ứng dụng v Để thực điều máy chủ A truyền liệu liệu có thành phần thông tin giúp máy B xác định ứng dụng u Phần thơng tin địa port máy B, hiểu lỗ cắm ảo máy B mà ứng dụng u đăng ký để độc quyền sử dụng nhằn nhận liệu từ máy chủ A Trên thực tế, địa port số nguyên byte có giá trị từ đến 65535 Nó có đặc điểm : - Giá trị từ đến 1023 cổng phổ biến dành cho ứng dụng thông dụng http: 80, mail : 25, ftp : 21, Telnet 23 Các giá trị cịn lại sử dụng linh hoạt 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE - Mỗi cổng thời điểm sử dụng cho tối đa ứng dụng Ví dụ ứng dụng sử dụng cổng 55 ứng dụng khác khơng thể sử dụng cổng 55 chừng ứng dụng trước chưa có đóng cổng 55 lại 1.3.4 Giới thiệu Socket - Socket khái niệm để định vị dịch vụ máy tính mạng kết hợp hai khái niệm IP Port lại - Socket có nhiệm vụ sau :  Gắn cổng máy  Lắng nghe kết  Kết nối/Đóng kết nối đến máy tính xa qua cổng gắn  Gửi/nhận liệu  Lắng nghe liệu đến - Thực chất, Socket chẳng qua kết hợp địa IP máy tính cổng Port mà ứng dụng sử dụng Chính kết hợp mà trở thành khái niệm mà từ đó, ngơn ngữ lập trình có chứa gói, giao diện lập trình (API) để hỗ trợ nhà lập trình dễ dàng việc lâp trình liên quan đến mạng qua giao thức TCP Điển hình ngơn ngữ Java mà nhóm chúng em giới thiệu sau 1.4 Lập trình mạng Java: 1.4.1 Gói ServerSocket Nhiệm vụ chính:  Mở cổng kết nối server, sẵn sàng hoạt động cổng public Socket(int port) : Tạo cổng kết nối cổng port  Lắng nghe, chờ đợi yêu cầu kết nối cổng kết nối có yêu cầu public accept():Chấp nhận kết nối trả đối tượng Socket mô tả nguồn kết nối đến  Tạo luồng liệu vào để truyền liệu cổng đến socket máy khách (Đây chức quan trọng nhất) getInputStream() : Trả luồng mà nhập liệu vào getOutputStream() : Trả luồng ghi liệu  Đóng kết nối khơng sử dụng 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE close() : Đóng kết nối khơng cần 1.4.2 Gói Socket Nhiệm vụ chính:  Kết nối tới máy chủ thông qua địa IP số hiệu cổng máy chủ Public Socket(InetAddress address, int port)  Tạo luồng liệu vào Public OutputStream getOutputStream() ; Public InputStream getInputStream() ;  Đóng kết nối Public void Close(); Đóng kết nối 1.4.3 Một số gói , lớp bổ trợ khác a Gói Swing, awt.event : tạo giao diện người dùng b Gói Runnable, Thread : Hỗ trợ đa tiến trình c Gói java.io : Cung cấp lớp vào liệu 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH 2.1 Phân tích u cầu : - Viết chương trình cho phép chat room nhiều người qua mạng 2.2 Phân tích chức : 2.2.1 Trên Client - Đăng nhập vào server với nickname người dùng tự chọn - Nhận danh sách nick online server - Gửi tin nhắn tới người, nhiều người tất người online khác server - Thực gửi file đến máy client khác - Nhận tin nhắn từ nickname khác gửi tới - Đăng xuất tài khoản 2.2.2 Trên Server - Tạo cổng kết nối sẵn sàng đón nhận kết nối từ client - Xử lý yêu cầu đăng nhập từ client  Nếu nickname chưa có đăng nhập từ trước cho đăng nhập  Nếu có đăng nhập từ trước với nickname cho người đăng nhập trước phải đăng xuất cho người đăng nhập vào - Trả danh sách nickname online cho nickname có yêu cầu - Nhận tin nhắn từ nickname chuyển tiếp tới nickname khác tương ứng theo yêu cầu nickname gửi - Loại nickname nickname yêu cầu đăng xuất - Xác nhận gửi file đến nickname yêu cầu - Cho phép người sử dụng theo dõi thành viên đăng nhập, đăng xuất 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE 2.3 Phân tích thiết kế chương trình: SERVER CLIENT Main Form Login Form Server Thread Main Form Socket Thread Client Thread 10 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE Tạo hiển thị thơng báo lên hình : Các phương thức cần có MainForm.java: 15 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE 16 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE Nút “khởi động máy chủ” : Nút “Dừng máy chủ” : b File ServerThread.java Khai báo thư viện : Khai báo ban đầu khai báo hiển thị hình appendMessage : Phương thức run() : 17 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE Phương thức stop() : c File SocketThread.java Khai báo thư viện : 18 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE Khai báo ban đầu, thiết lập luồng truyền liệu Socket DataInputStream : Thiết lập kết nối : 19 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE d File OnlineListThread.java Khai báo thư viện: Khai báo thiết lập ban đầu : Khai báo void run() : 20 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE 3.3.3 Chương trình máy Client a LoginForm.java Hàm kết nối đến Server người dùng click vào nút “Đăng nhập” : 21 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE b MainForm.java Khai báo thư viện : Khai báo ban đầu : 22 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE Thiết lập kết nối đến Server : Hàm danh sách online : 23 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE c File ClientThread.java Khai báo thư viện : Khai báo ban đầu, khởi tạo ClientThread thiết lập DataInputStream : 24 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE d File SendFile.java Khai báo ban đầu : Phương thức gọi đến người dùng click vào menu “Gửi File”, sau kết nối đến Server bắt đầu sẵn sàng để gửi file : 25 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE Phương thức SendFileThread gửi yêu cầu chuyển liệu đến Server : Code nút gửi file người dùng nhấn : 26 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE e File SendingFileThread.java Thiết lập ban đầu : Các tiến trình xử lý : 27 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE CHƯƠNG 4: PHÂN CÔNG , ĐÁNH GIÁ STT MSSV/ Họ tên Nội dung công việc thực Tự đánh giá điểm tỉ lệ Tham gia làm báo cáo, powerpoint, 1911064960 Nguyễn Văn Quang làm chức ServerThread, SoundEffect, MessageStyle, ClientThread 25% Tham gia làm báo cáo, powerpoint, làm giao diện cho form đăng nhập, 1911065665 Nguyễn Trung Thành form chat, form gửi file Làm chức OnlienListThread, chức 25% form đăng nhập Tham gia làm báo cáo, powerpoint, làm chức cho form main 1911064815 Nguyễn Đình máy chủ, chức cho form SendFile, SendingFileThread 25% Hùng Tham gia làm báo cáo, powerpoint, 1911061039 làm giao diện form máy chủ Làm Đào Nhật Tín chức ReceivingFileThread, MainForm Client, SocketThread 28 0 DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE 25% DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE DO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILEDO.an.lap.TRINH.MANG.UNG.DUNG.CHAT.va.gui.FILE

Ngày đăng: 24/12/2023, 14:57

w