Chương 4 Ứng dụng minh họaMô tả ứng dụng minh họa: Ứng dụng chat giữa các Pocket PC với nhau hoặc Pocket PC với máy tính để bàn: Mục đích: Ứng dụng này cho phép các Pocket PC cùng lúc có
Trang 1Chương 4 Ứng dụng minh họa
Mô tả ứng dụng minh họa:
Ứng dụng chat giữa các Pocket PC với nhau hoặc Pocket PC với máy tính để bàn:
Mục đích:
Ứng dụng này cho phép các Pocket PC cùng lúc có thể liên lạc trao đổi thông tin với nhau hoặc Pocket PC liên lạc với nhiều máy tính để bàn khác nhau thông qua một máy chủ
Chức năng:
Server:
Dùng một máy tính để bàn làm server Server sẽ tạo một dịch vụ trên cổng
1111 cho phép các client kết nối vào Sau khi các client kết nối thành công vào dịch vụ mà Server đang mở, các client sẽ được yêu cầu đăng ký nick name khác nhau để có thể liên lạc với nhau
Client:
Client bao gồm các Pocket PC hoặc các máy tính để bàn
Sau khi server đã mở dịch vụ, các client có thể kết nối vào dịch đó Nếu kết nối thành công, thì các client được phép đăng ký nick name và có thể trao đổi thông tin được với nhau
Trang 2Ứng dụng điều khiển Power Point:
Mục đích:
Ứng dụng này cho phép chúng ta sử dụng Pocket Pc để điều khiển Power Point ở máy chủ
Chức năng:
Server:
Dùng máy tính làm server Trên máy tính đang làm server sẽ đồng thời đang chạy trình chiếu Power Point Server sẽ nhận thông điệp từ Client( Pocket PC) Server chỉ nhận 6 loại thông điệp, đó là: lên, xuống, đầu trang, cuối trang, số trang bất kỳ, thoát Từ những thông điệp này mà server sẽ điều khiển Power theo những yêu cầu của thông điệp đó
Client:
Sau khi server đã mở dịch vụ, client(Pocket PC) sẽ kết nối đến server Nếu kết nối thành công, client sẽ gửi đến server 6 thông điệp nêu trên để server xử lý
Chi tiết các hàm liên quan đến ứng dụng:
Do đặc điểm của chương trình chat giữa Pocket PC và các máy tính để bàn
có kết nối mạng là Pocket PC có khả năng cùng lúc có thể liên lạc được với nhiều
máy tính để bàn, do đó trong ứng dụng này đòi hỏi phải sử dụng kỹ thuật lập trình song song Trong MFC, có hỗ trợ cơ chế đa tuyến, ở đây chúng ta chỉ đề cập đến một vài thành phần của cơ chế đa tuyến để hỗ trợ cho ứng dụng minh họa
Đa tuyến:
Cơ chế lập trình đa tiểu trình(MultiThread) cho phép ứng dụng có thể có nhiều tác vụ được xử lý song song Điều này giúp cho chương trình tăng được hiệu quả tính toán và linh hoạt hơn trong xử lý
Trang 3Một tiểu trình cơ bản phải có hàm xử lý của tiểu trình (ThreadProc), hàm này sẽ chứa nội dung xử lý của tiểu trình Có thể dung một số hàm khác nhau để tạo tiểu trình, chẳng hạn: CreateThread, _beginthread,AfxBeginThread Ở đây ta
sẽ khảo sát hàm CreateThread
HANDLE CreateThread (
SEC_ATTRS SecurityAttributes,
ULONG StackSize,
SEC_THREAD_START StartFunction,
PVOID ThreadParameter,
ULONG CreationFlags,
PULONG ThreadId
);
Quan trọng nhất trong hàm này là tham số StartFunction, đây là hàm cài đặt cho thread cần tạo ThreadParameter là một biến 4 byte được truyền vào hàm MyThread, biến pParam, nếu không cần truyền tham số, ta chỉ cần truyền NULL
Cách kết thúc một tiểu trình.
Ngoài việc một luồng tự kết thúc khi hàm dùng để cài đặt luồng kết thúc, ta còn có thể yêu cầu luồng kết thúc tức thời Tuy nhiên, việc kết thúc hàm theo kiểu
“thô bạo” như vậy sẽ dẫn đến việc không hủy bỏ đúng đắn những tài nguyên đã được cấp như mở file, kết nối mạng
Kết thúc luồng hiện hành: dùng hàm ExitThread(dwExitCode) trong đó dwExitCode là mã lỗi trả về, thường là bằng 0
Để kết thúc một luồng khác ta phải có handle của luồng đó (hThread) được trả về khi tạo luồng, khi đó dùng hàm TerminateThread(hThread, dwExitCode) để kết thúc một luồng
Tóm lại, để tạo một tiểu trình ta cần thực hiện theo các bước cơ bản sau đây:
Viết một hàm xử lý cho tiểu trình
DWORD WINAPI ThreadProc(
Trang 4LPVOID lp) {
// đoạn code xử lý cho tiểu trình
return 0;
}
Khai báo một biến kiểu HANDLE để giữ lại Handle của Thread
ví dụ: HANDLE hThread;
Gọi hàm CreateThread
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc
NULL, 0, NULL);
if (hThread == NULL) {
//Không tạo được Thread }
Khi muốn kết thúc thread ta gọi hàm TerminateThread như sau:
TerminateThread(hThread, 0);//kết thúc luồng bất kỳ
Hoặc ExitThread(0);//Kết thúc luồng hiện hành
Mô tả hoạt động của ứng dụng minh họa.
Ứng dụng chat giữa các Pocket PC hoặc Pocket PC với máy tính để bàn:
Trang 5Hình 4.1
Server
Kết nối server
Nế
u
chư
a
tồn
tại
- Lưu nick.
-Thông báo thành
công Gửi nick vừa
nhận cho các client và
ngược lại.
Nếu kết nối thàn hcô ng
Nế
u
đã tồn tại
- Lưu nick tạm thời.
-Thông báo nick đã tồn tại, gửi “exist” và nick tạm thời.
Kiểm tra nick
-Thông điệp đến client khác.
-Gửi thông điệp
“exit” nếu ngừng kết nối.
Gửi thông di p ệ Tạo tuyến nhận
thông điệp
-“thanhcong”: Gán nick tạm cho nick vừa nhận.
-“exist”:Nhận nick tạm, yêu cầu tạo nick mới.
-“server exit”:Không thể kết nối server.
-“nick”:Lưu nick vào danh sách, đưa nick lên ListBox -“mess”:hiển thị thông điệp lên màn hình.
-“exit”:Xóa nick vừa nhận ra khỏi danh sách, xóa ra khỏi ListBox.
Tạo
tuyến
xử lý
-“taonick”:chưa tồn tại: Gán nick tạm cho nick vừa
nhận.Gửi ”thanhcong” về client.Nếu tồn tại gửi “exist”
về client.
-“exit”: Xóa nick vừa nhận Gửi “exit” và nick vừa
nhận về cho các client khác.
-Ngược lại, nhận nick client gửi, client nhận và thông
điệp Gửi nick,”mess”, thông điệp của client gửi cho
client nhận.
Gửi về client
Tạo dịch vụ
Tạo tuy
ến Nh
ận kết nối
Trang 6Ứng dụng điều khiển Power Point:
Hình 4.2
Mô tả thuộc tính, phương thức chủ yếu của ứng dụng minh họa:
Ứng dụng chat giữa các Pocket PC hoặc Pocket PC với máy tính để bàn: Server:
Lớp chủ yếu của Server là lớp CsocketServerDlg
Thành phần dữ liệu chủ yếu:
Socket skListenskAccept[100] Socket lưu thông tin Client.
SOCKET hSock[100] Handle của skListenskAccept
HANDLE h[100] Handle của các tiểu trình
Client_Struct Cl[100] Cấu trúc của Client(gồm nickname, số thứ tự) ClistBox m_Danhsach ListBox thể hiện danh sách nickname client Cbutton m_Taodichvu Biến điều khiển nút Tạo Dịch Vụ
Phương thức chủ yếu:
Tiến trình
Power Point
Nếu kết nối thàn
h công -Gửi các thông điệp: lên, xuống, đầu trang, cuối trang, số trang bất
kỳ ,”exit” đến server.
Nhận kết nối.
Tạo tuyến
xử lý -Nhận các thông điệp, biên dịch các thông điệp thành mã phím tướng ứng, gửi đến Power Point.Nếu thông điệp “exit” đóng socket, đóng tuyến xử lý.
Trang 7void OnTaodichvu Tạo dịch vụ chat.
DWORD INAPI ServiceThread Tạo tuyến chờ đợi kết nối
void ReceiveThread Tạo tuyến xử lý các thông điệp từ client
void OnThoatdichvu Thoát dịch vụ
void OnThoat,void OnClose Thoát chương trình
Client:
Lớp yếu CsocketClientDlg
Thành phần dữ liệu:
CSocket skSend Socket kết nối server
tongso Lưu trữ tổng số client
Client client[100] Lưu trữ thông tin client(nick, số thứ tự)
m_Dsctongso Tổng số người được gửi(dịch vụ Conference) CString
m_Danhsachchon[100]
Danh sách người được chọn(dịch vụ Conference)
BOOL m_Nhieunguo Biến xác định dịch vụ là gửi một người hay
Conference
ClistBox m_Danhsach Listbox hiển thị nick name các client
Cstring m_ResultString Màn hình hiển thị kết quả
Cstring m_SendString Lưu trữ thông điệp cần gửi
Phương thức:
Tên phương thức Chức năng.
BOOL OnInitDialog Khởi tạo giá trị mặc định
void OnConnect Kết nối server
DWORD WINAPI
ReceiveThread
Tuyến nhận thông điệp từ server
DestroyWindow Xử lý sự kiện tắt cửa sổ
OnChon Kích hoạt dịch vụ Conference
OnThoichon Thoát dịch vụ Conference
OnSelchangeDanhsach Xử lý sự kiện chọn trên ListBox
Trang 8Ứng dụng điều khiển Power Point:
Server:
Thành phần dữ liệu:
HANDLE h Handle của tuyến tạo dịch vụ nhận
thông điệp từ client CsocketskServerskClient,skServerskClient Socket tạo dịch vụ và socket lưu
thông tin client
Phương thức:
Tên phương thức Chức năng.
BOOL OnInitDialog Khởi tạo giá trị ban đầu cho dữ liệu
void OnTaodichvu Tạo dịch vụ điều khiển Power Point
DWORD WINAPI
ReceiveThread(LPVOID lp)
Tuyến nhận thông điệp từ client
HWND findWindowHandle Tìm Handle của các cửa sổ
Client:
Thành phần dữ liệu:
CSocket skClient Socket để kết nối server
CString ServerAddress Lưu địa chỉ server
Cstring m_So Lưu số slide cần hiển thị
Phương thức:
Tên phương thức Chức năng.
BOOL
DestroyWindow
Xử lý sự kiện đóng cửa sổ
BOOL OnInitDialog Khởi tạo giá trị ban đầu cho dữ liệu
Trang 9void OnKetnoiserver Kết nối server.
OnLen Di chuyển lên
OnXuong Di chuyển xuống
OnDautrang Di chuyển lên đầu trang
OnCuoitrang Di chuyển xuông cuối trang
Ongui Gửi số trang bất kỳ
OnNgungketnoi Ngừng kết nối
Mô tả màn hình kết quả của ứng dụng
Ứng dụng chat giữa các Pocket PC hoặc Pocket PC với máy tính để bàn: Server:
Hình 4.3 Màn hình Server chat
Nút Tạo Dịch Vụ: Cho phép khởi động dịch vụ chat.
Nút Thoát Dịch Vụ: Cho phép dừng dịch vụ chat.
Nút Thoát: Thoát khỏi chương trình.
Listbox Danh sách: Hiển thị tất cả nick name của các client đã kết nối
thành công đến server
Client:
Hình 4.4 Màn hình Chat của Client trên máy tính để bàn
Trang 10 Nút kết nối Server: Hiển thị màn hình đăng nhập cho phép nhập vào địa
chỉ của Server đang mở dịch vụ
Hình 4.5 Màn hình đăng nhập địa chỉ kết nối server
Nếu kết nối thành công, xuất hiện màn hình đăng nhập nick name:
Hình 4.6 Màn hình đăng nhập nick name
Cho phép đăng nhâp nick name của client Nick name này được dùng như
là tên gọi để các client có thể giao tiếp trao đổi với nhau
Nếu đăng ký nick name thành công, thì trong ListBox “Danh sách” sẽ thể hiện tất cả các nick name của các client đã kết nối đến dịch vụ
Lúc đó, chúng ta chỉ cần click chọn một trong những nick name đó để có thể liên lạc Sau khi đã chọn một nick name, ta có thể nhập thông điệp vào trong
textbox bên dưới, chọn nút Gửi để gửi thông điệp.
Khi có thông điệp của client nào đó gửi đến thì bên cạnh nick name của
client đó sẽ xuất hiện thêm chữ new bên cạnh Chúng ta chỉ cần click chọn để
xem thông điệp
Mặt khác, chúng ta có thể click nút chọn trong nhóm Gửi nhiều người để
có thể gửi cùng lúc một thông điệp cho nhiều người
Trang 11Hình 4.7 Màn hình cho phép chọn gửi nhiều người.
ListBox Danh sách liệt kê tất cả những nick name đang kết nối đến server.
Ta dùng các nút “>,>>,<,<<” để có thể chọn hoặc không chọn các các nick
cần gửi
Nút Thôi chọn để ngưng dịch vụ gửi nhiều người.
Nút “Tạo Nick name”: Dùng để tạo nick name mới gửi đến server
Nút “Ngừng kết nối”: Dùng để ngừng kết nối đến server
Nút “Thoát”: Dùng để thoát chương trình