Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy

1. Giới thiệu

 Chức năng

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

 Mô hình lựa chọn

– Client/server

 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.

 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 - Chương 7: Chương trình chat trên nhiều máy trang 1

Trang 1

Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy trang 2

Trang 2

Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy trang 3

Trang 3

Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy trang 4

Trang 4

Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy trang 5

Trang 5

Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy trang 6

Trang 6

Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy trang 7

Trang 7

Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy trang 8

Trang 8

Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy trang 9

Trang 9

Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 19 trang xuanhieu 7680
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy", để 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 - Chương 7: Chương trình chat trên nhiều máy

Bài giảng Lập trình mạng - Chương 7: Chương trình chat trên nhiều máy
Chương 7: Chương trình chat trên nhiềumáy
 Chương 1
1. Giớithiệu
 Chứcnăng
 – Cho phép nhiềuuser đăng ký vào các nhóm để trò chuyệnvới nhau.
  Mô hình lựachọn
 – Client/server
  Server
 –Quản lý các nhóm và các user củatừng nhóm.
 – phân phốichuỗi thông tin từ một user đến các user khác.
  Client
 –Giaotiếpvới các user.
 – Cho phép họ đăng ký nhóm; gởi/nhận thông tin cho nhau.
 Chương 1
1. Giớithiệu
 Giao thứcdùngchohệ thống MiniChat
 –Lệnh GLIST 
 –Lệnh ULIST 
 –Lệnh LOGIN , 
 –Lệnh SEND 
 –Lệnh LOGOU 
  Dạng reply cho tấtcả các request
 –N 
 – N = 1: Thành công, N = 0: Thất bại
 Mô hình 7 tầng OSI
 Chương 1
2. Giao diện
 Chương 1
2. Hàm xử lý biếncố
  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ửasổ Properties,
 cửasổ sau xuất
 hiện:
 Chương 1
2. Hàm xử lý biếncố
 Phương pháp chính
 quy
 để khai báo biếnvà
 hàm
 xử lý biếncố vớicác
 phầntử giao diệnlà
 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ếncố: 
 Chương 1
2. Hàm xử lý biếncố
 Để tạo các biếndữ liệu
 kếthợpvới các control,
 chọn project, class chứa
 biến, trang Member
 variables, sau đóchọn
 từng ID phầntử rồi ấn
 nút button “Add
 variable”, cửasổ sau
 xuấthiện:
 Chương 1
2. Hàm xử lý biếncố
 Kếtquả tạo4
 biếnkếthợpvới
 4 phầntử giao
 diện. 
 Chương 1
2. Hàm xử lý biếncố
 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))==SO
 CKET_ERROR) {
 MessageBox("Khong bind socket duoc");
 return TRUE;
 }
 Chương 1
2. Hàm xử lý biếncố
 // 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);
 }
 }}
 Chương 1
2. Hàm xử lý biếncố
// 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);
}
 }
 Chương 1
2. Hàm xử lý biếncố
 // 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);
 }
 }}
 Chương 1
3. Kỹ thuậtxử lý Multithread với Java
 Thread
 –Mộtluồng thực thi trong mộtchương trình.
 –Máyảo JVM cho phép một ứng dụng có nhiềuluồng thực
 thi đồng thời.
  Có 2 cách dùng Java multithread (đaluồng):
 –Khaibáomộtlớpkế thừatừ lớp Thread và override method
 Thread.run().
 –Khaibáomộtlớphiệnthực interface Runnable và method
 Runnable.run()
 Chương 1
3. Kỹ thuậtxử lý Multithread với Java
 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();
 Chương 1
3. Kỹ thuậtxử lý Multithread với Java
 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();
 Chương 1
3. Kỹ thuậtxử lý Multithread với Java
 //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();
 }
 }
 Chương 1
3. Kỹ thuậtxử lý Multithread với Java
 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;
 Chương 1
3. Kỹ thuậtxử lý Multithread với Java
 // 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();
 }
 }}
 Chương 1
3. Kỹ thuậtxử lý Multithread với Java
 // 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();
 }
 }}

File đính kèm:

  • pdfbai_giang_lap_trinh_mang_chuong_7_chuong_trinh_chat_tren_nhi.pdf