ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Lớp WINP1.B21 – Nhóm 26 BÁO CÁO
ĐỒ ÁN LẬP TRÌNH TRÊN WINDOWS
ĐỀ TÀI
Xây Dựng Chương Trình LAN Chat GIÁO VIÊN HƯỚNG DẪN:
THS.PHẠM THI VƯƠNG
NHÓM SINH VIÊN THỰC HIỆN:
NGÔ DUY KHÁNH (09520414)
NGUYỄN TRỌNG NHÂN (09520425)
VĂN PHÚ HIẾU (09520409)
TP. HỒ CHÍ MINH, 6/2011
1
Mục Lục
I- Giới thiệu về .Net Remoting: 2
1- .Net Remoting:
.Net Remoting là cơ chế giao tiếp giữa các đối tượng (object) mà không cùng thuộc
một Process. Giúp các lớp đối tượng thuộc các ứng dụng khác nhau có thể liên lạc
được với nhau. Các đối tượng của các ứng dụng này có thể được thiết lập trên cùng
một máy tính hay các máy tính khác nhau và được giao tiếp từ xa thông qua các giao
thức kết nối như HTTP, TCP.
Microsft .Net Remoting được giới thiệu từ .Net Framework 1.1 cùng với Webservice.
Cung cấp các kĩ thuật cho phép một đối tượng này truy xuất đến một đối tượng khác
nằm ở các Application Domain khác nhau.
2- .NET Remoting so với Web Services:
Về khía cạnh xử lý từ xa thì Web Services hoàn toàn tương tự như .NET Remoting.
Thậm chí người ta có thể làm cho .NET Remoting trở thành 1 Web Services bằng
cách host nó trong IIS. Web Services cho phép các ứng dụng có thể giao tiếp với nhau
mà không phụ thuộc platform, ngôn ngữ lập trình, … Tuy nhiên Web Services là một
môi trường “stateless”, có nghĩa là nó không lưu lại bất kì trạng thái gì của lần gọi
trước và nó cũng không biết gì về phía client đang thực hiện request. Client và server
Web Services chỉ có thể trao đổi với nhau bằng các thông điệp SOAP. Những điều sau
đây là các điểm khác nhau chính giữa .NET Remoting và Web Serices, chúng cũng là
những nhân tố để ta chọn lựa giữa 2 công nghệ này:
• ASP.NET Web Services chỉ có thể được truy xuất qua HTTP còn .NET
Remoting có thể được dùng trên nhiều giao thức khác nhau như TCP, HTTP.
3
• Web Services là một môi trường stateless. Khi có một request từ phía client, sẽ
có một object mới được tạo ra để thực hiện request đó trên server. Còn .NET
Remoting lại hỗ trợ nhiều lựa chọn state management và có thể thực hiện nhiều
request từ một client, đồng thời có hỗ trợ callbacks.
• Web Services serialize các đối tượng thành XML bên trong SOAP message và
request tới Server sử dụng toán tử “new”, một thông điệp sẽ được gửi tới
4
Remote Application. Server sau đó sẽ tạo ra một Instance của lớp được yêu
cầu, và trả về một ObjRef cho Client Application.
4- Domain:
Trong .NET, khi một ứng dụng được nạp vào trong bộ nhớ, một tiến trình được tạo
ra, và trong quá trình này, một miền ứng dụng (Application Domain) cũng được tạo
ra. Trên thực tế, ứng dụng này sẽ được nạp vào Application Domain. Mỗi ứng dụng có
thuộc các Application Domain khác nhau, vì thế nếu chúng muốn giao tiếp được với
nhau thì phải sử dụng Remoting chứ không thể giao tiếp trực tiếp với nhau được. Các
Application Domain có thể cùng thuộc một process hoặc khác process.
5- Channel:
Trong kĩ thuật .NET Remoting thì Channel được hiểu như là một kênh để giao tiếp
giữa client và server. Một Object từ Client sẽ thông qua Channel để giao tiếp với
Object phía server, Channel sẽ truyền tải những message từ hai phía. Như giới thiệu
phía trên thì có hai channel chính là TcpChannel và HttpChannel tương ứng với các
giao thức TCP và HTTP. Ngoài ra, TcpChannel và HttpChannel đều có khả
năng extend thành những Custom Channel.
Các nguyên tắc khi thiết lập một Channel:
- Cần có ít nhất một Channel được đăng ký với .NET Remoting trước khi
Remote Object được gọi. Và các Channels này cần đăng ký trước các Remote
Object.
- Channel được đăng ký trong mỗi Application Domain hoặc nhiều Application
Domain thuộc một Process. Khi Process kết thúc thì các Channel này cũng tự
động được hủy đi.
- Không thể đăng ký các Channel khác nhau trên cùng một port thuộc cùng một
máy tính mặc dù các Channel này có thể ở các Application Domai khác nhau.
Khi thiết lập nhiều Channel trên cùng một máy tính thì chúng cần listen ở các
RemotingConfiguration.RegisterWellKnownServiceType( typeof(RemoteServerObject),
"Test", WellKnownObjectMode.SingleCall); RemotingConfiguration.RegisterWellKnownServiceType( typeof(RemoteServerObject),
"Test", WellKnownObjectMode.Singleton);
7- Client Activated Objects:
Đối tượng Client Activated Object được tạo ra mỗi trên Server ngay lập tức mỗi khi
có request từ Client hoặc cũng có thể tạo ra bằng từ khóa new hoặc
Activator.CreateInstance(…). // On the Server
RemotingConfiguration.ApplicationName = "TestCAO";
RemotingConfiguration.RegisterActivatedServiceType(typeof(RemoteObjectCAO)); // On the Client
RemotingConfiguration.RegisterActivatedClientType(typeof(RemoteObjectCAO),
"tcp://localhost:1002/TestCAO");
obj = new RemoteObjectCAO();
Tùy thuộc vào hoàn cảnh và nhu cầu mà ta sử dụng loại khác nhau. Ví dụ:
- Singleton object được dùng để tham chiếu đến những đối tượng cùng trên một
server, và bất kỳ thay đổi của Client cũng sẽ “visible” (hiện hữu) với những
}
II- Giới thiệu về Socket:
1- Socket:
Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình
yêu cầu dịch vụ ( client) và một chương trình cung cấp dịch vụ (server) trên mạng
LAN, WAN hay Internet và đôi lúc là giữa những quá trình ngay bên trong máy
tính. Mỗi socket có thể được xem như một điểm cuối trong một kết nối. Một socket
trên máy yêu cầu dịch vụ có địa chỉ mạng được cấp sẵn để “gọi” một socket trên
máy cung cấp dịch vụ. Một khi socket đã được thiết lập phù hợp, hai máy tính có
thể trao đổi dịch vụ và dữ liệu. Socket được giới thiệu lần đầu tiên trong ấn bản
UNIX - BSD 4.2. dưới dạng các hàm hệ thống theo cú pháp ngôn ngữ C (socket(),
bind(), connect(), send(), receive(), read(), write(), close() , ). Ngày nay, Socket
7
được hỗ trợ trong hầu hết các hệ điều hành như MS Windows (WinSock), Linux và
được sử dụng trong nhiều ngôn ngữ lập trình khác nhau: như C, C++, C#, Java,
Visual Basic, Visual C++ . . .
2- Chức năng:
Socket cho phép thiết lập các kênh giao tiếp mà hai đầu kênh được xác định bởi hai
cổng (port). Thông qua các cổng này một tiến trình có thể nhận và gởi dữ liệu với
các tiến trình khác.
3- Phân loại:
Có các loại Socket chính là:
+ Socket kiểu AF_UNIX chỉ cho phép giao tiếp giữa các tiến trình trong cùng
một máy tính.
+ Socket kiểu AF_INTET cho phép giao tiếp giữa các tiến trình trên nhưng
máy tính khác nhau trên mạng.
23
Dịch vụ telnet
25
Dịch vụ mail (SMTP)
80
HTTP
110
Mail (POP3)
9
443
HTTPS 5- Các chế độ giao tiếp:
Xét kiến trúc của hệ thống mạng TCP/IP
Tầng vận chuyển (Transport Layer) giúp chuyển tiếp các thông điệp giữa các
chương trình với nhau. Nó có thể hoạt động theo hai chế độ:
+ Giao tiếp có nối kết, nếu giữa chúng sử dụng giao thức TCP.
+ Giao tiếp không kết nổi, nếu sử dụng giao thức UDP.
Socket là giao diện giữa chương trình và lớp vận chuyển. Nó cho phép ta chọn
giao thức sử dụng ở tầng vận chuyển là TCP hay UDP cho chương trình ứng dụng
của mình.
Bảng so sánh sự khác biện giữa hai chế độ giao tiếp có kết nối và không kết nối.
Chế độ có nối kết
Chế độ không nối kết
+ Tồn tại kênh giao tiếp ảo giữa hai bên
giao tiếp.
1.
public void StartListening()
2.
{
3.
byte[] bytes = new Byte[1024];
4.
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 6565);
5.
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
6.
try
7.
{
8.
listener.Bind(ipEnd);
9.
listener.Listen(100);
10.
}
21.
}
11
Ta thấy Server đã khởi tạo một Socket gồm IP và port 6565 và sẵn sàng lắng nghe kết
nối trên cổng 6565 từ Client.
Giai đọan 2: Client tạo Socket, yêu cầu thiết lập một nối kết với Server
1.
private void btnSend_Click(object sender, EventArgs e)
2.
{
3.
Socket clientSock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
4.
b yte[] fileName = Encoding.UTF8.GetBytes(fName);
// tên file
5.
lblStatus.Text = "Đang truyền tải dữ liệu. Làm ơn đợi ";
14.
clientSock.Send(clientData);
15.
clientSock.Close();
16.
lblStatus.Text = "File đã được chuyển đi thành công!";
17.
}
- Client yêu cầu khởi tạo một socket để sử dụng các dịch vụ của tầng vận chuyển, hệ
thống sẽ kiểm tra xem port nào còn trống sẽ tự động gán cho socket của Client.
Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
- Client gởi yêu cầu kết nối đến Server có địa chỉ IP và port xác định:
clientSock.Connect(IP, 6565);
12
- Sau khi Server chấp nhận kết nối của Client, khi đó một kênh giao tiếp ảo được hình
thành, Client và Server có thể trao đổi thông tin với nhau.
Giai đọan 3: Trao đổi thông tin giữa Client và Server
- Sau khi chấp nhận yêu cầu kết nối, Server đợi Clinet gởi yêu cầu đến. Ở đây, Client
Thay đổi mật khẩu.
FormChatRoom
Giao diện chính của Room chat và các chức năng.
FormJoinRoom
Tham gia vào mổ Room chat đã được tạo.
FormCreateAccount
Giao diện tạo một người dùng mới.
FormFileSender
Giao diện chức năng gửi file bên người gửi.
FormFileReceive
Giao diện chức năng gửi file bên người nhận.
FormLogsReader
Xem lại lịch sử chat của nick hiện hành.
FormMessage
Giao diện cửa sổ chat, sử dụng các thao tác nâng cao như
Webcam, SendFile, Music,…
FormMusicPlayer
Chương trình nghe nhạc online, mời bạn nghe nhạc.
FormNetworkSetting
Thiết lập IP máy chủ.
FormOfflineMessage
Xem các tin nhắn Offline.
FormOption
Chức các tùy chỉnh của chương trình.
FormPhotoSend
Giao diện chia sẽ hình ảnh bên người gửi.
FormPhotoReceive
Giao diện chia sẽ hình ảnh bên người nhận.
FormSelectContact
Xóa nick chat ra khỏi list.
- .Net Remoting sử dụng Singleton. Đăng ký các kênh Httpchannel và
TCPchannel.
- Socket sử dụng giao thức TCP.
- Các hàm xử lý I/O, xử lý tiến trình.
- Regular Expression.
- Truyền giá trị giữa các Form sử dụng Delegate và thông qua Construtor.
- Xử lý mã HTML khi hiển thị lên Webrowser.
- …
4/ Các tính năng đã làm được cho một chương trình Chat qua mạng LAN:
- Có thể Chat qua mạng LAN với nội dung là text.
- Hỗ trợ quản lý nhiều bạn chat bằng danh bạ, có thể chat với nhiều người cùng
một lúc.
- Hỗ trợ tạo Room Chat, chat theo nhóm. Phân quyền được mời bạn chat vào
Room Chat.
- Hỗ trợ gửi và xem tin nhắn Offline.
- Hỗ trợ gửi file.
- Hỗ trợ chia sẽ hình ảnh kèm theo tính năng SlideShow.
- Hỗ trợ xem Webcam.
- Hỗ trợ tìm kiếm và nghe nhạc trực tuyến. Mời bạn chat nghe nhạc.
- Hỗ trợ xem lại Log chat.
- Hỗ trợ các tùy chỉnh cho người dùng.
- Cho phép thao tác danh bạ bằng menu.
- Thông báo trạng thái nick chính xác (Online/Offline/Invisible).
- Chương trình sử dụng ít tài nguyên hệ thống.
- …
15
5/ Các tính năng chưa làm được, sẽ cải thiệt hoặc phát triển ở các phiên bản
kế tiếp:
Tại cửa sổ đăng nhập, chọn Tạo tài khoản mới để sử dụng.
Trong Form Đăng ký, cung cấp những thông tin về tên tài khoản, mật khẩu và tên hiển
thị. Sau đó chọn Tạo.
18 MessageBox thông báo việc tạo tài khoản thành công. Chúng ta có thể sử dụng tài
khoản này để đăng nhập vào chương trình. Chọn Đăng nhập. Và đã vào giao diện
chính của chương trình.
Giao diện chính:
19
Chức năng Menu Bar
Menu
Chức năng
Phím tắt
Mô tả
Messenger
Gửi một tin nhắn
Ctrl+G
Gởi tin nhắn tới một người.
Thêm bạn bè
Ctrl+T
Thêm một người vào danh sách
Đổi tên hiển thị với bạn bè
Nghe nhạc online
Nghe nhạc trực tuyến từ
mp3.zing.vn. Tìm kiếm,
download bài hát. Mời bạn
chát nghe nhạc.
Mở một Room Chat
Tạo Room chat cho nhiều
người cùng tham gia.
Tham gia Room Chat
Tham gia Room chat co sẵn.
Trợ giúp
Hướng dẫn sử dụng
Hướng dẫn sử dụng.
Thông tin
Nhóm thực hiện.
Cửa sổ chat:
Cửa sổ Chat: 20 Menu
Gởi thành công:
21
Chia sẻ hình ảnh:
Gởi ảnh: Sau khi chọn nút gởi ảnh, cửa sổ Chia sẻ hình ảnh được bật lên ở 2 bên.
Hình ảnh được gởi sẽ hiện lên ở cả 2 bên, dưới dạng slide hình ảnh.
Bên gửi ảnh: 22 Bên nhận ảnh:
Webcam
Hiển thị webcam 2 người đang chat trực tiếp với nhau.
23
Nghe nhạc: Menu
Chức năng
Phím tắt
Mời bạn có trong danh sách cùng
nghe nhạc
Mời bạn có trong danh sách
cùng nghe nhạc
Tìm kiếm(5)
Tìm kiếm bài hát
Tìm kiếm bài hát
Tải về máy
(6)
Download bài hát được chọn về
máy
Download bài hát được chọn về
máy 24
Tạo Room Chat
Menu
Chức năng
Mô tả
Nội dung chat
(1)
Hiển thị nội dung chat của cả