Bài giảng Lập trình mạng - Chương 2+3: Lập trình Minichat - Nguyễn Cao Đạt

Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LP TRÌNH MINICHAT  
CHƯƠNG II, III  
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  
GII THIU C.TRÌNH MINICHAT  
z Chc năng  
Cho phép nhiu user đăng ký vào các nhóm để trò chuyn vi nhau.  
z M
Client/server  
z Server  
Qun lý các nhóm và các user ca tng nhóm.  
phân phi chui thông tin tmt user đến các user khác.  
z Client  
Giao tiếp vi các user.  
Cho phép họ đăng ký nhóm; gi/nhn thông tin cho nhau.  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 2  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
GII THIU C.TRÌNH MINICHAT  
z Giao thc dùng cho hthng MiniChat  
Lnh GLIST <CRLF>  
Lnh ULIST <CRLF>  
Lnh LOGIN <tên group>,<tên user> <CRLF>  
Lnh SEND <string> <CRLF>  
Lnh LOGOU <CRLF>  
z Dng reply cho tt ccác request  
N <chui dliu phkèm theo>  
N = 1: Thành công, N = 0: Tht bi  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 3  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
GIAO DIN C.TRÌNH MINICHAT  
Ca snhp thông tin  
ca button “Connect”  
Ca snhp thông tin ca  
button “login”  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 4  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
XLÝ BIN CTRÊN VC++  
z To hàm xlý biến  
ccho tng button  
bng cách chn  
tng button, chn  
mc event trong  
ca sProperties,  
ca ssau xut  
hin:  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 5  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
XLÝ BIN CTRÊN VC++ (t.t)  
z Phương pháp chính quy  
để khai báo biến và hàm  
x
phn tgiao din là  
dùng menu  
View.ClassWizard, ca  
sClassWizard xut  
hin, trang MessageMap  
cho phép khai báo các  
hàm xlý biến c:  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 6  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
XLÝ BIN CTRÊN VC++ (t.t)  
z Để to các biến dliu  
kết hp vi các control,  
chn project, class cha  
biến, trang Member  
variables, sau đó chn  
tng ID phn tri n  
nút button “Add  
variable”, ca ssau  
xut hin:  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 7  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
XLÝ BIN CTRÊN VC++ (t.t)  
z Kết quto 4  
biến kết hp vi  
4
din.  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 8  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
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;  
}
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 9  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
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);  
}
}
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 10  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
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);  
}
}
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 11  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
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];  
stat
if (s
mesg[status] = 0;  
if (strncmp(mesg,"LOGIN",5)==0) {  
Do_login(sock,mesg);  
// login  
} else if (strncmp(mesg,"LOGOU",5)==0) {  
Do_logout(sock);  
// logout  
} 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);  
}
}
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 12  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
KTHUT JAVA Multithread  
z Thread  
Mt lung thc thi trong mt chương trình.  
Máy o JVM cho phép mt ng dng có nhiu lung thc  
thi đồng thi.  
z Có 2 cách dùng Java multithread (đa lung):  
Khai báo mt lp kế tha tlp Thread và override method  
Thread.run().  
Khai báo mt lp hin thc interface Runnable và method  
Runnable.run()  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 13  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
KTHUT JAVA Multithread  
1. class PrimeThread extends Thread {  
2.  
3.  
4.  
5.  
6.  
7.  
8.  
9.  
long minPrime;  
PrimeThread( long minPrime ) {  
}
public void run( ) {  
// compute primes larger than minPrime  
. . .  
}
10. }  
11. PrimeThread p = new PrimeThread(143);  
12. p.start();  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 14  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
KTHUT JAVA Multithread  
1. class PrimeRun implements Runnable {  
2.  
3.  
4.  
5.  
long minPrime;  
PrimeRun ( long minPrime ) {  
this.minPrime = minPrime;  
}
6.  
7.  
8.  
9.  
public void run() {  
// compute primes larger than minPrime  
. . .  
}
10. }  
11. PrimeRun p = new PrimeRun(143);  
12. new Thread(p).start();  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 15  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
MINICHAT SERVER TRÊN JBuider  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 16  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
MINICHAT SERVER TRÊN JBuider  
//Constructor ca 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 + "  
...");  
// to thread con để chờ  
new ServerAcceptThread(this,serverSocket).start();  
} // end try  
// handle exception creating server and connecting clients  
catch ( IOException ioException ) {  
ioException.printStackTrace();  
}
}
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 17  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
MINICHAT SERVER TRÊN JBuider (t.t)  
public class ServerAcceptThread extends Thread {  
ServerSocket serverSocket;  
MiniChatServerDlg serverChat;  
public ServerAcceptThread(MiniChatServerDlg server, ServerSocket sock) {  
ser
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;  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 18  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
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();  
}
}
}
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 19  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
TOÅNG KEÁT  
z Gii thiu 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  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 20  
pdf 10 trang Thùy Anh 12/05/2022 2240
Bạn đang xem tài liệu "Bài giảng Lập trình mạng - Chương 2+3: Lập trình Minichat - Nguyễn Cao Đạt", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_mang_chuong_23_lap_trinh_minichat_nguyen.pdf