Chuong III - Lap Trinh Client-Server

Embed Size (px)

DESCRIPTION

clientserver

Citation preview

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