CC KHI NIM C BN V LP TRNH MNG
CHNG IIILP TRNH CLIENT-SERVER
I. Cc khi nim
1. Lp trnh client-server+ L vit ng dng gm hai chng trnh: chng trnh client v chng trnh server. Chng trnh client gi yu cu n chng trnh sever. Chng trnh server x l yu cu v tr kt qu v cho chng trnh client. Chng trnh server phi c kh nng phc v ng thi nhiu client bng cch to ra nhiu thread, mi thread phc v mt client. Khi client kt thc th thread phc v cho client cng phi kt thc.
+ Chng trnh Java client, server c xp vo lp Application v s dng nhng gi java.net truy xut lp transport (TCP/UDP) l lp do h iu hnh cung cp.
+ u im ca m hnh client-server:- Ti nguyn (file, CSDL, my in,...) trn mng c s dng chung => tit kim ti nguyn.- Ti nguyn c qun l tp trung bi server => phn quyn, bo v ti nguyn tt hn.
2. IP, port, Socket, Protocol+ IP: l s nguyn 4 bytes hoc 6 bytes, mi my tnh trn mng s c IP khc nhau dng phn bit my tnh ny vi my tnh khc.+ Port: l s nguyn khng m 2 bytes t 0 65,535, mi ng dng trn cng mt my s s dng port khc nhau dng phn bit ng dng ny vi ng dng khc trn cng mt my. S hiu cng t 0 n 1023 nn hn ch s dng v chng c dng cho nhng dch v thng dng nh HTTP, FTP, POP3, SMTP,...V d:
Dch vS dng cng
FTP (truyn /nhn file)21
HTTP (web)80
TELNET (truy xut my tnh t xa)23
SMTP (gi mail)25
POP3 (ly mail)110
+ Socket: l c ch do h iu hnh cung cp, gip cc chng trnh trn mng lin lc vi nhau. Mi socket s dng mt cng khc nhau. Socket c hai lai l TCP Socket v UDP Socket.
+ Protocol (giao thc): l qui c giao tip gia cc chng trnh trn mng, khi lp trnh mng ta thng s dng giao thc TCP (Transmission Control Protocol) hoc UDP (User Datagram Protocol). S khc nhau gia giao thc TCP v giao thc UDP:TCPUDP
Hai ng dng cn phi thit lp kt ni v duy tr kt ni trong khi cn lin lcHai ng dng khng thit lp kt ni
m bo d liu gi, c nhn chnh xc v ng th t.Khng m bo d liu gi, c nhn chnh xc v ng th t.
Gi/nhn d liu theo lung bytesGi/nhn d liu dng gi, cc gi gi/nhn c lp vi nhau. Mi gi cha cc thng tin sau: IP, port ca my gi; IP, port ca my nhn; data cn gi,...
Chm v phi kim tra li, tn ti nguyn v cn thit lp v duy tri kt ni. Khi ng dng cn s chnh xc cao hoc lng d liu gi/nhn ln th nn dng giao thc TCP. V d cc dch v ngn hng, dch v FTP cn dng TCP.UDP nhanh hn TCP v khng phi kim tra li, t tn ti nguyn v khng kt ni. Nhng ng dng khng cn s chnh xc cao, khng cn m bo th t gi/nhn, lng d liu gi/nhn nh th nn dng UDP. V d cc dch v hi gi, nhn tin,... nn dng UDP.
Lu l c nhng firewalls v routers khng cho php gi/nhn gi UDP do admin t cu hnh cm gi UDP.
Lin lc bng giao thc TCP c xem nh lin lc bng in thai (socket=din thai; port= s in thai)Lin lc bng giao thc UDP c xem nh lin lc bng th tn (socket=hp th; port= a ch hp th).
3. C ch lin lc bng socketa/ TCP Socket+ Server m mt socket dng lng nghe yu cu kt ni t cc client. Khi chp nhn mt kt ni t client, server m mt socket khc gi/nhn d liu vi client. Ct server thc thi trn my c IP v port c nh.+ Client m mt socket gi yu cu kt ni n server v sau dng socket ny gi/nhn d liu vi server.
+ Nu c n client kt ni ng thi n server, server phi m (n+1) socket, to n thread phc v n client.+ M hnh client-server s dng giao thc TCP v c ch socket:
b/ UDP Socket
- Server ch cn m mt UDP socket duy nht dng gi/nhn gi vi tt c cc client. Socket ca server phi s dng port c dnh client gi gi n ng chng trnh server. Server u tin nhn gi cha yu cu t client, ly d liu trong gi ra x l v ng gi kt qu gi v cho client (server nhn trc, gi sau).- Client m mt socket dng gi/nhn gi vi bt k server no nu bit IP, Port ca server. Socket ca client dng port ng (port cha c ng dng no trn my client s dng). Client u tin gi gi cha yu cu n server, sau nhn gi cha kt qu (client gi trc, nhn sau).- Server cng cn to cc thread, mi thread x l yu cu ca mt client, nu khng to thread th cc yu cu ca cc client s c server x l tun t.- gi gi cho nhau, server/client ch cn to gi cha d liu, ghi gi vo socket. H iu hnh s em gi n ng my nhn v ng ng dng trn my nhn nh IP v port ca my nhn ghi trong gi.
- M hnh client-server s dng giao thc UDP v c ch socket:
II. Cu trc chng trnh Java client-server
1. Cu trc chng trnh TCP- Cn import java.io.*; import java.net.*;
- S dng lp java.net.Socket v java.net.ServerSocket to socket- Server to ServerSocket lng nghe yu cu kt ni t client.- Client v Server mun gi/nhn d liu cho nhau cn m lung ghi/c (out/in) trn socket ca client/server.
Sau client/server dng lung out, ghi d liu vo socket ca client/server; h iu hnh s chuyn d liu vo socket ca server/client. Client/server dng lung in c d liu trong socket ca client/server.- Lung c/ghi socket dng chui unicode:
BufferedReader in= new BufferedReader(new InputStreamReader(socket.getInputStream()));//lung c socket
String data = in.readLine();//c d liu dng chui
PrintWriter out= new PrintWriter(socket.getOutputStream(), true);//luong ghi dl dng chui
out.println(data);
- Lung c/ghi socket dng i tng (i tng phi ci t interface Serializable):
ObjectInputStream in=new ObjectInputStream(new DataInputStream(socket.getInputStream()));Vd: Sinhvien sv=(Sinhvien)in.readObject();//c i tng sinh vin t socketObjectOutputStream out =new ObjectOutputStream(new DataOutputStream(cs.getOutputStream()));
Vd:out.writeObject(sv);//ghi i tng sinh vin vo socket* Chng trnh TCP Sever
//ltm cn gi net v gi io
import java.net.*;import java.io.*;
public class TCPServer extends Thread {
Socket cs;//socket de lien lac voi client BufferedReader in;//luong doc dl do client goi PrintWriter out;//luong goi dl cho client public TCPServer(Socket cs) throws IOException {//phuong thuc constructor this.cs = cs;
in = new BufferedReader(new InputStreamReader(cs.getInputStream()));
out = new PrintWriter(cs.getOutputStream(), true);
}
public void run() {//thuc thi cv cua thread, start goi run
try {
while (true) {//vong lap de xu ly yc cua client nhieu lan
String yc = in.readLine(); //nhan yc dang chuoi
if(yc.equals(quit) break;//neu yc=quit thi kt thread
// xu ly yeu cau, tao kq dang chuoi
out.println(kq); //goi kq ve cho client
}
in.close();out.close();cs.close();//dong cac luong in,out va dong socket } catch (IOException ex) { }
}
public static void main(String[] args) throws IOException {
//mo socket sd cong 1234, dung de lang nghe yc kn
//1234 la port server su dung, c th thay port khc
//m cha c ng dng no tren server s dng
ServerSocket ss = new ServerSocket(1234);
while (true) {//vong lap de chap nhan nhieu ket noi
//cho va chap nhan kn tu client, cs la socket dung de goi nhan dl voi client.
Socket cs = ss.accept();
new TCPServer(cs).start(); //tao thread phuc vu client
}
}
}* Chng trnh TCP Clientimport java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) throws Exception {
//mo socket, goi yc kn den server ten la localhost, 1234 la port server su dung
Socket cs = new Socket("localhost", 1234);
//mo luong out,in de goi nhan du lieu voi server
PrintWriter out = new PrintWriter(cs.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(cs.getInputStream()));
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); while (true) {//vong lap de client co the goi yeu cau nhieu lan
System.out.print("Nhap yc:"); String yc = stdin.readLine();
out.println(yc);//goi yc dang chuoi cho server
if(yc.equals("quit")) break; //neu yc="quit" thi client ket thuc
String kq=in.readLine();//nhan ket qua dang chuoi
System.out.println(kq);//in kq }
in.close();out.close();cs.close();//dong cac luong in,out va dong socket }
}2. Cu trc chng trnh UDP
- Cn import java.io.*; import java.net.*;
- S dng lp java.net.DatagramSocket to socket.- S dng lp DatagramPacket ng gi d liu. - D liu c lin quan cn cho vo chung mt gi.- Server mun gi gi cho nhiu client:
+ Client dng socket kiu MulticastSocket v cng c nh vd 9999MulticastSocket socket = new MulticastSocket(9999);+ Khai bo mt a ch nhm: vi d 230.0.0.1 InetAddress address = InetAddress.getByName("230.0.0.1");+ ng k l thnh vin ca nhm:
socket.joinGroup(address);
+ Server gi gi cho nhm:
byte[]buf = chuoi can goi.getBytes();
InetAddress group = InetAddress.getByName("230.0.0.1");
DatagramPacket packet = new DatagramPacket(buf, buf.length, group, 9999);
socket.send(packet);khi tt c cc client thuc cng nhm s nhn c gi.* Chng trnh UDP Sever
import java.io.*;
import java.net.*;
public class UDPServer extends Thread {
static DatagramSocket socket; static int port=1234; DatagramPacket packet; public UDPServer(DatagramPacket packet) {
this.packet=packet;
} public void run() {
String data = new String(packet.getData()).trim();//lay du lieu trong goi dang chuoi
//xu ly du lieu, tao chuoi ket qua result
String result = "chuoi ket qua";
byte[] buf = result.getBytes();//cat chuoi result vao mang buf
InetAddress address = packet.getAddress();//lay dia chi client
int port = packet.getPort();//lay port client
packet = new DatagramPacket(buf, buf.length, address, port);//tao goi chua ketqua
try {
socket.send(packet); //goi goi ket qua cho client
} catch (IOException ex) {
}
}
public static void main(String[] args) throws Exception { socket = new DatagramSocket(port); //mo socket de lien lac voi cac client
while (true) {//vong lap de nhan nhieu goi tu cac client
byte[] buf = new byte[256];//mang chua dl nhan
DatagramPacket packet = new DatagramPacket(buf, buf.length);//tao goi rong
socket.receive(packet);//nhan goi
new UDPServer(packet).start();//tao thread xu ly goi }
}
}* Chng trnh UDP Clientimport java.io.*;
import java.net.*;
public class UDPClient {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket();//tao socket de goi/nhan goi voi may khac
InetAddress address = InetAddress.getByName("localhost"); //ly dia chi my server
int port=1234;//port server su dung
while (true) {//vong lap de goi/nhan nhieu lan
String data = "chuoi du lieu can goi";
if (data.equals("quit")) {
break;//neu data="quit" thi client ket thuc
}
byte[] buf = data.getBytes();//cat chuoi data vao mang buf
DatagramPacket packet = new DatagramPacket(buf, buf.length,address ,port);//tao goi chua data
try {
socket.send(packet); //goi goi data cho server
} catch (IOException ex) {
}
buf = new byte[256];//mang chua ket qua packet = new DatagramPacket(buf, buf.length);//tao goi rong
socket.receive(packet);//nhan goi ket qua String result = new String(packet.getData()).trim();//lay ket qua trong goi dang chuoi
System.out.println(result);//in ket qua }
socket.close();//dong socket }
}-------------------------------------------------------------------------------------------------------------------------------------Bi tp1/ Vit chng trnh gii pt bc nht ax+b=0, dng client-server, s dng giao thc TCP/UDP.2/ Vit chng trnh xem d bo thi tit , dng client-server, s dng giao thc TCP/UDP. Bit rng thng tin thi tit ghi trong file vn bn hoc c s d liu dng sau:a/ File vn bn
m tpnhit m
hcm30-35
30%
hn25-30
20%
...
a/ CSDL
matp
varchar(10)
nhietdo
varchar(10)
doam
varchar(10)
3/ Vit chng trnh qun l im, s dng giao thc TCP/UDP, c cc chc nng nhp/xem/xa/sa im v thng k s sv thi li, t l thi lai. Gi s CSDL Qld c Table BangDiem cu trc:
masv
varchar(10)
diemthifloat
4/ Vit chng trnh qun l tuyn sinh i hc dng client-server, s dng giao thc TCP/UDP, c cc chc nng sau:
- Nhp im th sinh gm s bo danh, im thi ba mn, m khu vc, m i tng ghi vo CSDL - Xem danh sch th sinh thi u, gi s im chun l 14 v tng im=(mn 1+ mn 2+ mn 3+ im u tin khu vc+ im u tin i tng), nu c mt mn im=0 hoc tng im