Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat

GIỚI THIỆU C.TRÌNH MINICHAT

z Chức năng

– Cho phép nhiều user đăng ký vào các nhóm để trò chuyện với nhau.

z Mô hình lựa chọn

– Client/server

z Server

– Quản lý các nhóm và các user của từng nhóm.

– phân phối chuỗi thông tin từ một user đến các user khác.

z Client

– Giao tiếp với các user.

– Cho phép họ đăng ký nhóm; gởi/nhận thông tin cho nhau.

Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat trang 1

Trang 1

Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat trang 2

Trang 2

Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat trang 3

Trang 3

Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat trang 4

Trang 4

Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat trang 5

Trang 5

Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat trang 6

Trang 6

Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat trang 7

Trang 7

Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat trang 8

Trang 8

Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat trang 9

Trang 9

Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat trang 10

Trang 10

pdf 10 trang xuanhieu 8900
Bạn đang xem tài liệu "Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat

Bài giảng Lập trình mạng dùng Socket - Chương 2+3: Lập trình minichat
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 1
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
CHƯƠNG II, III
LẬP TRÌNH MINICHAT
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 2
GIỚI THIỆU C.TRÌNH MINICHAT
z Chức năng
– Cho phép nhiều user đăng ký vào các nhóm để trò chuyện với nhau.
z Mô hình lựa chọn
– Client/server
z Server
– Quản lý các nhóm và các user của từng nhóm.
– phân phối chuỗi thông tin từ một user đến các user khác.
z Client
– Giao tiếp với các user.
– Cho phép họ đăng ký nhóm; gởi/nhận thông tin cho nhau.
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 3
GIỚI THIỆU C.TRÌNH MINICHAT
z Giao thức dùng cho hệ thống MiniChat
– Lệnh GLIST 
– Lệnh ULIST 
– Lệnh LOGIN , 
– Lệnh SEND 
– Lệnh LOGOU 
z Dạng reply cho tất cả các request
– N 
– N = 1: Thành công, N = 0: Thất bại
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 4
GIAO DIỆN C.TRÌNH MINICHAT
Cửa sổ nhập thông tin 
của button “Connect”
Cửa sổ nhập thông tin của
button “login”
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 5
XỬ LÝ BIẾN CỐ TRÊN VC++
z Tạo hàm xử lý biến
cố cho từng button 
bằng cách chọn
từng button, chọn
mục event trong
cửa sổ Properties, 
cửa sổ sau xuất
hiện: 
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 6
XỬ LÝ BIẾN CỐ TRÊN VC++ (t.t)
z Phương pháp chính quy
để khai báo biến và hàm
xử lý biến cố với các
phần tử giao diện là
dùng menu 
View.ClassWizard, cửa
sổ ClassWizard xuất
hiện, trang MessageMap
cho phép khai báo các
hàm xử lý biến cố:
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 7
XỬ LÝ BIẾN CỐ TRÊN VC++ (t.t)
z Để tạo các biến dữ liệu
kết hợp với các control, 
chọn project, class chứa
biến, trang Member 
variables, sau đó chọn
từng ID phần tử rồi ấn
nút button “Add 
variable”, cửa sổ sau
xuất hiện:
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 8
XỬ LÝ BIẾN CỐ TRÊN VC++ (t.t)
z Kết quả tạo 4 
biến kết hợp với
4 phần tử giao
diện.
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 9
MINICHAT SERVER TRÊN VC++
BOOL CMiniChatServerDlg::OnInitDialog() {
// Tao socket moi, neu that bai bao sai
ser_sock=socket(AF_INET,SOCK_STREAM,0);
if(ser_sock==INVALID_SOCKET) {
MessageBox("Khong tao duoc socket");
return TRUE;
}
// Thiet lap dia chi diem dau mut va bind no voi socket
SOCKADDR_IN local_addr;
local_addr.sin_family=AF_INET;
local_addr.sin_port=256;
local_addr.sin_addr.s_addr=INADDR_ANY;
if(bind(ser_sock,(LPSOCKADDR)&local_addr,sizeof(local_addr))==SOCKET_ERROR) {
MessageBox("Khong bind socket duoc");
return TRUE;
}
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 10
MINICHAT SERVER TRÊN VC++ (t.t)
// Khai bao so yeu cau ket noi dong thoi
if(listen(ser_sock,10)==SOCKET_ERROR) {
MessageBox("Khong listen duoc");
return TRUE;
}
// Khai bao nhan du lieu bat dong bo + dong cau noi bat dong bo
if (WSAAsyncSelect(ser_sock, m_hWnd, WSA_ACCEPT, FD_ACCEPT) > 0) {
MessageBox("Error on WSAAsyncSelect()");
closesocket(ser_sock);
}
}
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 11
MINICHAT SERVER TRÊN VC++ (t.t)
// Accept 1 yeu cau noi ket
void CMiniChatServerDlg::OnAccept(void) {
SOCKADDR_IN remote_addr;
SOCKET sock;
// Cho ket noi
int len=sizeof(remote_addr);
sock=accept(ser_sock,(LPSOCKADDR)&remote_addr,&len);
if(sock==INVALID_SOCKET) {
MessageBox("Khong accept duoc");
return;
}
T_UserRec *puser = new(T_UserRec);
puser->sock = sock;
puser->next = sock_no_user;
sock_no_user = puser;
// Khai bao nhan du lieu bat dong bo + dong cau noi bat dong bo
if (WSAAsyncSelect(sock, m_hWnd, WSA_RDCLOSE, FD_READ|FD_CLOSE) > 0) {
MessageBox("Error on WSAAsyncSelect()");
closesocket(sock);
}
}
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 12
MINICHAT SERVER TRÊN VC++ (t.t)
// Doc vao request va xu ly
void CMiniChatServerDlg::Request_Process(SOCKET sock) {
int status;
char mesg[MSG_LENGTH];
status = recv(sock, mesg, MSG_LENGTH, 0);
if (status==0) return;
mesg[status] = 0;
if (strncmp(mesg,"LOGIN",5)==0) { // login
Do_login(sock,mesg);
} else if (strncmp(mesg,"LOGOU",5)==0) { // logout
Do_logout(sock);
} else if (strncmp(mesg,"GLIST",5)==0) { // group list
Do_glist(sock);
} else if (strncmp(mesg,"ULIST",5)==0) { // user list
Do_ulist(sock);
} else { // broadcast message
Do_broadcastMesg(sock,mesg);
}
}
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 13
KỸ THUẬT JAVA Multithread
z Thread
– Một luồng thực thi trong một chương trình. 
– Máy ảo JVM cho phép một ứng dụng có nhiều luồng thực
thi đồng thời.
z Có 2 cách dùng Java multithread (đa luồng):
– Khai báo một lớp kế thừa từ lớp Thread và override method 
Thread.run().
– Khai báo một lớp hiện thực interface Runnable và method 
Runnable.run()
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 14
KỸ THUẬT JAVA Multithread
1. class PrimeThread extends Thread {
2. long minPrime;
3. PrimeThread( long minPrime ) {
4. this.minPrime = minPrime;
5. }
6. public void run( ) {
7. // compute primes larger than minPrime
8. . . .
9. }
10. }
11. PrimeThread p = new PrimeThread(143); 
12. p.start(); 
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 15
KỸ THUẬT JAVA Multithread
1. class PrimeRun implements Runnable {
2. long minPrime;
3. PrimeRun ( long minPrime ) {
4. this.minPrime = minPrime;
5. }
6. public void run() {
7. // compute primes larger than minPrime
8. . . .
9. }
10. }
11. PrimeRun p = new PrimeRun(143); 
12. new Thread(p).start();
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 16
MINICHAT SERVER TRÊN JBuider
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 17
MINICHAT SERVER TRÊN JBuider
//Constructor của frame
public MiniChatServerDlg() {
// Tao sersersocket lang nghe cho server
try {
serverSocket = new ServerSocket( SERVER_PORT, 100 );
DefaultListModel lmContent = (DefaultListModel)jlbContent.getModel();
lmContent.addElement("Server listening on port " + SERVER_PORT + " 
...");
// tạo thread con để chờ
new ServerAcceptThread(this,serverSocket).start();
} // end try
// handle exception creating server and connecting clients
catch ( IOException ioException ) {
ioException.printStackTrace();
}
}
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 18
MINICHAT SERVER TRÊN JBuider (t.t)
public class ServerAcceptThread extends Thread {
ServerSocket serverSocket;
MiniChatServerDlg serverChat;
public ServerAcceptThread(MiniChatServerDlg server, ServerSocket sock) {
serverSocket = sock;
serverChat = server;
}
public void run() {
T_UserRec puser;
try {
// listen for clients constantly
while (true) {
// accept new client connection
Socket clientSocket = serverSocket.accept();
puser = new T_UserRec();
puser.sock = clientSocket;
puser.next = serverChat.m_sock_no_user;
serverChat.m_sock_no_user = puser;
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 19
MINICHAT SERVER TRÊN JBuider (t.t)
// create new ReceivingThread for receiving messages from client
new ReceivingThread(serverChat, clientSocket).start();
// print connection information
DefaultListModel lmContent = 
(DefaultListModel)serverChat.jlbContent.getModel();
lmContent.addElement("Connection received from: " + 
clientSocket.getInetAddress());
serverChat.SendMessage(clientSocket,"Request accepted");
} // end while
}
// handle exception creating server and connecting clients
catch ( IOException ioException ) {
ioException.printStackTrace();
}
}
}
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 20
TOÅNG KEÁT
z Giới thiệu chương trình MiniChat
z Cách viết chương trình trên Visual C++
z Cách viết chương trình trên JBuilder

File đính kèm:

  • pdfbai_giang_lap_trinh_mang_dung_socket_chuong_23_lap_trinh_min.pdf