Professional Documents
Culture Documents
Giaotrinhlaptrinhmangtruyenthong8gf2d2012092401535630 121107012825 Phpapp02
Giaotrinhlaptrinhmangtruyenthong8gf2d2012092401535630 121107012825 Phpapp02
CHNG 1
Tng quan v lp trnh truyn thng
Mc ch
Chng ny nhm cung cp cho cc bn mt ci nhn tng quan v cc vn c
lin quan trong lp trnh truyn thng
Yu cu
Sau khi hon tt chng ny, bn c th:
Gii thch c C ch giao tip lin qu trnh (Inter-Process
Communication ) l g.
M t chc nng, nhim v ca cc tng trong m hnh OSI.
nh ngha v giao thc v bin lun c s cn thit ca giao thc trong
truyn thng .
M t v b giao thc TCP/IP.
nh ngha m hnh Client Server.
Phn bit c 2 ch giao tip: Nghn v Khng nghn.
Phn bit c cc kiu kin trc chng trnh.
Tng ny cho php cc ng dng thit lp, s dng v xa cc knh giao tip
gia chng (c gi l giao dch). N cung cp c ch cho vic nhn bit tn
v cc chc nng v bo mt thng tin khi truyn qua mng.
V nguyn tc, tng n ca mt h thng ch giao tip, trao i thng tin vi tng n
ca h thng khc. Mi tng s c cc n v truyn d liu ring:
Tng vt l: bit
Tng lin kt d liu: Frame
Tng mng: Packet
Tng vn chuyn: Segment
Trong thc t, d liu c gi i t tng trn xung tng di cho n tng thp
nht ca my tnh gi. , d liu s c truyn i trn ng truyn vt l. Mi khi
ng dng Web: S dng giao thc HTTP ti cc trang web t Web Server
v Web Browser.
ng dng th in t: S dng giao thc SMTP chuyn tip mail gi i
n Mail Server ca ngi nhn v dng giao thc POP3 hoc IMAP nhn
mail v cho ngi c.
ng dng truyn ti tp tin: S dng giao thc FTP ti (download) cc tp
tin t cc FTP Server xa v my ngi dng hay ngc li.
.....
<HEADER>\n\n
<CONTENT>
HTTP/1.0 200 OK
Date: Mon, 24 Nov 2003 02:43:46 GMT
Server: Apache/1.3.23 (Unix) (Red-Hat/Linux) mod_ssl/2.8.7
OpenSSL/0.9.6b DAV/1
.0.3 PHP/4.1.2 mod_perl/1.26
Last-Modified: Tue, 01 Jul 2003 08:08:52 GMT
ETag: "17f5d-2abb-3f014194"
Accept-Ranges: bytes
Content-Length: 10939
Content-Type: text/html
X-Cache: HIT from proxy.cit.ctu.edu.vn
Proxy-Connection: close
<HTML>
<HEAD>
<LINK href="favicon.ico" rel="SHORTCUT ICON">
...............................
1. Cc chc nng thc hin vic tng tc vi ngi dng nh to cc giao din
nhp liu hay in cc bo biu, thng bo ra mn hnh. Cc chc nng ny
c gi chung l Dch v giao din ngi dng (User Interface Service).
2. Cc chc nng tnh ton cc d liu, x l thng tin theo nhng qui lut
(rule), gii thut c qui nh bi vn m ng dng gii quyt. Cc chc
nng ny c gi chung l Dch v nghip v (Business Rule Service).
3. Trong qu trnh tnh ton, chng trnh ng dng cn truy vn n cc thng
tin c c lu trn a cng hay trong cc c s d liu. Cng nh cn
thit phi lu li cc kt qu tnh ton c s dng v sau. Cc chc
nng ny c gi chung l Dch v lu tr (Data Storage Service).
User Interface
Business Rule
Data Storage
Hnh 1.12 - Kin trc chng trnh Client Server theo kiu Fat Client
u im
To ra t giao thng trn mng nh d liu tm thi trong qu trnh tnh ton
c lu ti Client.
Nhc im
Hnh 1.13 - Kin trc chng trnh Client Server theo kiu Fat Server
u im
Nhc im
1.8. Bi tp
1.8.1. Bi tp bt buc
1.8.2. Bi tp gi
CHNG 2
S lc v ngn ng Java
Mc ch
Chng ny nhm gii thiu s lc v ngn ng java cho cc sinh vin c kin
thc cn bn v Lp trnh hng i tng vi C++. Chng ny s khng cp n tt
c cc vn c trong Java m ch gii thiu nhng vn c bn nht v ngn ng Java,
cc hc vin c th c hiu cc chng trnh minh ha v lm c cc bi tp ng
dung cc chng sau.
Yu cu
Sau khi hon tt chng ny, bn c th:
Mt chng trnh sau khi c vit bng ngn ng Java (c phn m rng l .java) phi
c bin dch thnh tp tin thc thi c trn my o Java (c phn m rng l .class).
Tp tin thc thi ny cha cc ch th di dng m Bytecode m my o Java hiu c
phi lm g.
Khi thc hin mt chng trnh, my o Java ln lt thng dch cc ch th di
dng Bytecode thnh cc ch th dng nh phn ca my tnh thc v thc thi thc s
chng trn my tnh thc.
My o thc t l mt chng trnh thng dch. V th cc h iu hnh khc
nhau s c cc my o khc nhau. thc thi mt ng dng ca Java trn mt h iu
hnh c th, cn phi ci t my o tng ng cho h iu hnh .
Kiu k t char
Kiu mng
o Khai bo:
int[] a ; float[] yt; String[] names;
hoc: int a[]; float yt[]; String names[];int maTran[][]; float
bangDiem[][];
o Khi to:
a = new int[3]; yt = new float[10]; names = new String[50];
maTran = int[10][10];
o S dng mng:
int i = a[0]; float f = yt[9]; String str = names[20]; int x =
matran [2][5];
Tn lp:
o Cc k t u tin ca mt t c vit hoa,
o Cc k t cn li vit thng.
o V d: lp Nguoi, SinhVien, MonHoc, String, InputStream,
OutputStream. . .
Tn bin, tn hng, tn phng thc:
o T u tin vit thng.
o K t u tin ca t th hai tr i c vit hoa.
V d: ten, ngaySinh, diaChi, inTen(), inDiaChi(), getInputStream(), . .
.
V tr t du { v } bt u v kt thc cc khi nh sau:
if (condition) {
command1;
command1;
} else {
command3;
command4;
javac HelloWorld.java
java HelloWorld
1.2.6. Mt s v d
1.2.6.1. Hin th thng tin ra mn hnh
in thng tin ra mn hnh bn dng phng thc
System.out.print(arg1+ arg2+ .. + argn)
Java s t ng nh dng d liu cho cc tham s arg1, arg2, ..., argn ty theo kiu
ca chng.
Hy lu chng trnh sau vo tp tin Display.java:
import java.io.*;
public class KeyRead {
public static void main(String args[]) {
try {
int ch = System.in.read();
System.out.print("Ky tu " + (char)ch + " co ma ascii = "+ch);
} catch(IOException ie) {
System.out.print("Error " + ie) ;
}
}
}
try {
....
} catch(IOException ie) {
....
}
if (Condition) {
// Cc lnh s c thc hin nu gi tr ca Condition l true
}
if (Condition) {
// Cc lnh s c thc hin nu gi tr ca Condition l true
} else {
// Cc lnh s c thc hin nu gi tr ca Condition l false
}
V d:
Lu chng trnh sau vo tp tin IfDemo.java :
import java.io.*;
public class IfDemo {
public static void main(String args[]) {
System.out.print("Vui long nhap mot ky tu:");
try {
int ch = System.in.read();
if (ch == 'A') {
System.out.print("Ban rat may man !");
}
else {
System.out.print("Ban khong gap may !");
}
} catch(IOException ie) {
System.out.print("Error:"+ie);
}
}
}
import java.io.*;
public class QuestionOp {
public static void main(String args[]) {
System.out.print("Vui long nhap mot ky tu:");
try {
int ch = System.in.read();
int point = (ch == 'A') ? 10:0;
System.out.print("Diem cua ban la:"+point);
} catch(IOException ie) {
System.out.print("Error:"+ ie);
}
}
}
switch ( variable ) {
case value1 : {
Task 1;
// Cc tc v s c thc thi nu gi tr ca variable l value1
break;
}
case value2 : {
Task 2;
// Cc tc v s c thc thi nu gi tr ca variable l value2
break;
}
...
default:
Task n;
// Tc v s c thc thi nu gi tr ca variable khng l cc gi tr trn
}
V d
Lu chng trnh sau vo tp tin CaseOp.java
import java.io.*;
public class CaseOp {
public static void main(String args[]) {
System.out.print("Enter a number character: ");
try {
int ch = System.in.read();
switch(ch) {
case '0': { System.out.print("Zero");break;}
case '1': { System.out.print("One"); break;}
case '2': { System.out.print("Two"); break;}
case '3': { System.out.print("Three");break;}
case '4': { System.out.print("Four"); break;}
case '5': { System.out.print("Five"); break;}
case '6': { System.out.print("Six"); break;}
case '7': { System.out.print("Seven");break;}
case '8': { System.out.print("Eight");break;}
case '9': { System.out.print("Nine"); break;}
default: { System.out.print("I don't know"); break;}
}
} catch(IOException ie) {
System.out.print("Error "+ie);
}
}
}
while (condition) {
// nu condition c gi tr l true, th cc tc v y s c lp li
}
V d
Lu chng trnh sau vo tp tin WhileDemo.java
import java.io.*;
public class WhileDemo {
public static void main(String args[]) {
int num = '9';
while (num > '0') {
System.out.print((char)num +" ");
num--;
}
}
}
import java.io.*;
public class DoWhileDemo {
public static void main(String args[]) {
int num = '9';
do {
System.out.print((char)num +" ");
num--;
} while (num > '0');
}
}
operation1;
while (condition) {
// Cc tc v c lp li
operation2;
}
V d
import java.io.*;
public class ForDemo {
public static void main(String args[]) {
for(int num = '9'; num>'0'; num --) {
System.out.print((char)num +" ");
}
}
}
import java.io.*;
public class BreakDemo {
public static void main(String args[]){
int num =Integer.valueOf(args[0]).intValue();
int i= num / 2;
while(true){
if (num % i ==0) break;
i--;
}
System.out.println("So lon nhat chia het "+num+ " la: "+i);
}
}
import java.io.*;
public class ContinueDemo{
public static void main(String args[]){
int num =Integer.valueOf(args[0]).intValue();
System.out.print("The odd numbers: ");
for (int i =0; i< num; i++ ){
if (i % 2 ==0) continue;
System.out.print(i+ " ");
}
}
}
Chng trnh ny in ra tt c cc s l nh hn s a vo t i s.
1.3.9. Mt s vn khc
1.3.9.1. c i s ca chng trnh
Khi thc thi chng trnh ta c th nhp vo cc i s t dng lnh theo c php
sau:
java ClassName arg1 arg2 arg3 argn
Cc i s cch nhau khong trng. n nhn cc i s ny, phng thc main
bt buc phi khai bo mt tham s kiu mng cc chui
public static void main(String args[]) {
}
Cc i si s ln lt c t vo cc phn t ca mng ny. S lng i s c
th xc nh c bng cch truy xut thuc tnh args.length ca mng.
V d
Lu chng trnh sau vo tp tin PrintArgs.java
try {
Cc thao tc vo ra c th sinh ra cc ngoi l.
}
catch (KiuNgoiL_01 bin) {
ng x khi ngoi l KiuNgoaiL_01 sinh ra
} catch (KiuNgoiL_02 bin) {
ng x khi ngoi l KiuNgoaiL_02 sinh ra
}finally { Cng vic lun lun c thc hin }
class ClassName {
// Danh sch cc thuc tnh thuc lp
DataType01 attribute1, attribute2, . .;
DataType02 attribute3, attribute4, . .;
// Danh sch cc phng thc thuc lp
ClassName([DataType parameter, DataType parameter]) {
// Constructor
...
}
void method01() {
...
}
DataType method02( . . .) {
...
return xx;
}
}
V d: nh ngha mt lp c:
Tn l Person
Hai thuc tnh l name v address
Phng thc khi to c hai tham s gn gi tr khi ng cho hai thuc
tnh.
Phng thc void display() cho bit ngi tn l g, a ch u.
Phng thc main() to ra mt i tng tn l tom thuc lp Person
C php:
class A extends B { // Khai bo A tha k t B
...
}
1.6. Vo / Ra vi Stream
Stream l mt dng lin tc, c th t cc bytes d liu chy gia chng trnh v
cc thit b ngoi vi. N l khi nim tru tng gip gim bt cc thao tc vo ra phc
tp i vi ngi lp trnh. N cho php ni kt nhiu loi thit b ngoi vi khc nhau vi
chng trnh.
Nu dng d liu trong Stream c hng chy t thit b ngoi vi vo chng trnh
th ta ni y l Stream nhp (Input Stream), ngc li l Stream xut (Output Stream).
i vi Java, cc thit b ch nhp, nh bn phm, s c cc Stream nhp ni vi n,
cc thit b ch xut, nh mn hnh, s c cc stream xut ni vi n , cc thit b va xut,
va nhp, nh a t, th c c stream nhp v xut ni vi n.
giao tip vi cc thit b ngoi vi, chng trnh trc tin phi ly c cc
stream nhp / xut gn vi thit b ngoi vi ny. Sau , chng trnh c th gi d liu ra
ngoi vi bng thao tc ghi vo Stream xut ca ngoi vi. Ngc li, chng trnh c th
nhn d liu t ngoi vi bng thao tc c stream nhp ca ngoi vi .
Nh vy, chng trnh ch lm vic trn cc stream nhp v stream xut, m khng
quan tm n c im ring bit ca thit b ngoi vi ni vi Stream. iu ny gip
chng trnh giao tip vi h thng mng cng d dng nh giao tip vi mn hnh, bn
phm hay a t.
Mt im khc cn lu l stream bao gm nhng bytes ri rc. Nhng bytes ny
m t nhng dng d liu khc nhau. V d mt s integer khi vit vo stream s chuyn
thnh 4 bytes. V th cn phi c cc thao tc chuyn i d liu nhn v gi gia chng
trnh v stream.
Java h tr hai cc lp stream c bn trong gi java.io l:
java.io.InputStream: Stream nhp
java.io.OutputStream: Stream xut
1.6.1. Lp java.io.InputStream
L loi stream cho php chng trnh nhn d liu t ngoi vi. C cc phng thc
c bn sau:
int read() throws IOException :
c 1 byte t Stream
import java.io.*;
public class InStream1 {
public static void main(String args[]) {
InputStream is = System.in; // KeyBoard = System.in
while (true) {
try {
int ch = is.read();
if (ch ==-1 || ch =='q') break;
System.out.print((char)ch);
} catch (IOException ie) {
System.out.print("Error: "+ie);
}
}
}
}
Cc phng thc trn khi thc thi s b nghn (block) cho n khi c d liu hoc
kt trc Stream hay mt ngoi l xut hin.
int available()
Tr v s lng byte hin c trong Stream m khng lm nghn chng trnh.
V d:
Lu chng trnh sau vo tp tin c tn InStream2.java
import java.io.*;
public class InStream2 {
public static void main(String args[]) {
InputStream is = System.in; // KeyBoard = System.in
while (true) {
try {
int num = is.available();
if (num > 0){
byte[] b = new byte[num];
int result = is.read(b);
if (result == -1) break;
String s = new String(b);
System.out.print(s);
} else {
System.out.print('.');
}
} catch (IOException ie) {
System.out.print("Error: "+ie);
}
}
}
}
1.6.2. Lp java.io.OutputStream
L loi stream cho php chng trnh xut d liu ra ngoi vi. C cc phng thc
c bn sau:
void write(int b) throws IOException
V d:
Hy lu chng trnh sau vo tp tin OutStream1.java
import java.io.*;
public class OutStream1 {
public static void main(String args[]) {
OutputStream os = System.out; // Monitor = System.out
try {
String str = "The example of OutputStream";
byte b[] = str.getBytes(); // i chui thnh mng cc bytes
os.write(b);
} catch (IOException ie) {
System.out.print("Error: "+ie);
}
}
}
V d: c chui t bn phm
Lu chng trnh sau vo tp tin ReadLine.java
import java.io.*;
public class ReadLine{
public static void main(String args[]) {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
while (true) {
try {
String line = br.readLine();
if (line == null ) break;
System.out.print(line);
} catch (IOException ie) {
System.out.print("Error: "+ie);
}
}
}
}
import java.io.*;
public class PrintString {
public static void main(String args[]) {
OutputStream os = System.out;
PrintWriter pw = new PrintWriter(os);
pw.write("This is a string \r\n");
pw.println("This is a line");
pw.write("Bye! Bye!");
pw.flush();
}
}
1.7.1. Cc mc ci t lung
Nhn t gc h iu hnh , Lung c th c ci t mt trong hai mc:
Cc thuc tnh
o name: tn ca thread
o n: s ln thread xut hin ra mn hnh
Cc phng thc:
o MyThread(String name, int n):
o run()
o main()
Thread.MAX_PRIORITY
Thread.NORM_PRIORITY
Thread.MIN_PRIORITY
V d:
Trong v d ny chng ta to ra 12 Thread thuc lp MyThread. Mt mng 3 phn
t tn prio cha 3 u tin t cao nht n thp nht. Thread th i s c u tin v
tr i%3 trong mng prio. Nh vy cc thread 0,3,6,9 c u tin cao nht, sau n
Thread 1,4,7,10 v cui cng l cc thread 2,5,8,11.
Lu chng trnh sau vo tp tin PriorityThread.java
1.8. Bi tp p dng
Ch 1: C bn v Java
Mc ch:
o Sinh vin lm quen vi ngn ng Java, vit 1 s chng trnh n gin
bng Java.
o Thc tp cch nhp / xut thng tin qua Java.
o Thit k lp n gin qua Java.
Yu cu
Mc ch:
o Thit k lp di Java.
Yu cu
Ch 3: Thread
Mc ch:
o Tm hiu v lung (Thread), cch lp trnh lung, lp trnh song song.
Yu cu: Sinh vin thc bi tp sau:
o Bi 1 : Vit chng trnh m phng bi ton "Ngi sn xut - Ngi
tiu dng", trong Ngi sn xut s sn xut ra mt s lng ngu
nhin n sn phm no ri yu cu nhp kho. Ngi tiu dng s yu
cu xut kho mt s lng ngu nhin m sn phm no t kho. Yu
cu nhp kho ch c chp nhn nu s lng hng ha a vo
khng vt qu sc cha ca kho, nu khng, phi ch cho n khi c
ch trng trong kho. Yu cu xut kho ch c chp nhn khi cn
hng trong kho nu khng cng phi ch.
Gi : Thit k cc lp sau:
CHNG 3
ng dn (Pipe)
Mc ch
Chng ny nhm gii thiu c ch giao tip lin qu trnh u tin l Pipe v cch
s dng n trong Java lm phng tin giao tip gia cc Thread trong mt chng
trnh.
Yu cu
Sau khi hon tt chng ny, bn c th:
Trnh by c cc c im ca Pipe.
Bit cch to Pipe v xut/ nhp d liu trn Pipe trong Java.
Gii thch c chc nng ca dch v phn hi thng tin (Echo Service).
Xy dng, bin dch v thc thi thnh cng chng trnh PipedEcho.
1.2.2. Cc cch to ng dn
to mt ng dn ta ch cn to ra hai i tng thuc lp PipedInputStream v
PipedOutputStream v ni chng li vi nhau. Khi d liu c ghi vo
PipedOutputStream s c c ra u PipedInputStream:
1. To u c:
o PipedInputStream readId = new PipedInputStream();
2. To u ghi:
o PipedOutputStream writeId = new PipedOutputStream();
3. Ni u c vi u ghi hay ngc li
o readId.connect(writeId);
o // hoc writeId.connect(readId);
Cch 2
1. To u c:
o PipedInputStream readId = new PipedInputStream();
2. To u ghi v ni vo u c c:
o PipedOutputStream writeId = new PipedOutputStream(readId);
1.4.1. Lp PipedEchoServer
Hy lu chng trnh sau vo tp tin PipedEchoServer.java
import java.io.*;
public class PipedEchoServer extends Thread {
PipedInputStream readPipe;
PipedOutputStream writePipe;
PipedEchoServer(PipedInputStream readPipe, PipedOutputStream writePipe){
this.readPipe = readPipe;
this.writePipe = writePipe;
System.out.println("Server is starting . . .");
start();
}
public void run(){
while(true) {
try{
int ch = readPipe.read();
ch = Character.toUpperCase((char)ch);
writePipe.write(ch);
}
catch (IOException ie) { System.out.println("Echo Server Error: "+ie ); }
}
}
}
1.4.2. Lp PipedEchoClient
Hy lu chng trnh sau vo tp tin PipedEchoClient.java
import java.io.*;
public class PipedEchoClient extends Thread {
PipedInputStream readPipe;
PipedOutputStream writePipe;
PipedEchoClient(PipedInputStream readPipe, PipedOutputStream writePipe){
this.readPipe = readPipe;
this.writePipe = writePipe;
System.out.println("Client creation");
start();
}
public void run(){
while(true) {
try {
int ch=System.in.read();
writePipe.write(ch);
ch = readPipe.read();
System.out.print((char)ch);
}
catch(IOException ie){
System.out.println("Echo Client Error: "+ie );
}
}
}
}
1.4.3. Lp PipedEcho
Hy lu chng trnh sau vo tp tin PipedEcho.java
import java.io.*;
public class PipedEcho {
public static void main(String argv[]){
try{
PipedOutputStream cwPipe = new PipedOutputStream();
PipedInputStream crPipe = new PipedInputStream();
PipedOutputStream swPipe = new PipedOutputStream(crPipe);
PipedInputStream srPipe = new PipedInputStream(cwPipe);
PipedEchoServer server = new PipedEchoServer(srPipe,swPipe);
PipedEchoClient client = new PipedEchoClient(crPipe,cwPipe);
} catch(IOException ie) {
System.out.println("Pipe Echo Error:"+ie);
}
}
}
CHNG 4
Socket
Mc ch
Chng ny nhm gii thiu v cch thc xy dng ng dng Client-Server trn
mng TCP/IP theo c hai ch C ni kt (TCP) v Khng ni kt (UDP).
Yu cu
Sau khi hon tt chng ny, bn c th:
1. Socket kiu AF_UNIX ch cho php giao tip gia cc qu trnh trong cng
mt my tnh
2. Socket kiu AF_INET cho php giao tip gia cc qu trnh trn nhng my
tnh khc nhau trn mng.
7 Dch v Echo
21 Dch v FTP
23 Dch v Telnet
Socket l giao din gia chng trnh ng dng vi tng vn chuyn. N cho php
ta chn giao thc s dng tng vn chuyn l TCP hay UDP cho chng trnh ng dng
ca mnh.
Bng sau so snh s khc bit gia hai ch giao tip c ni kt v khng ni kt:
Sau khi chp nhn yu cu ni kt, thng thng server thc hin lnh read()
v nghn cho n khi c thng ip yu cu (Request Message) t client gi
n.
Server phn tch v thc thi yu cu. Kt qu s c gi v client bng lnh
write().
Sau khi gi yu cu bng lnh write(), client ch nhn thng ip kt qu
(ReplyMessage) t server bng lnh read().
Trong giai on ny, vic trao i thng tin gia Client v Server phi tun th giao
thc ca ng dng (Dng thc v ngha ca cc thng ip, qui tc bt tay, ng b
ha,... ). Thng thng Client s l ngi gi yu cu n Server trc.
Nu chng ta pht trin ng dng theo cc Protocol nh ngha sn, chng ta
phi tham kho v tun th ng nhng qui nh ca giao thc. Bn c th tm c m t
chi tit ca cc Protocol c chun ha trong cc ti liu RFC (Request For
Comments). Ngc li, nu chng ta pht trin mt ng dng Client-Server ring ca
mnh, th cng vic u tin chng ta phi thc hin l i xy dng Protocol cho ng dng.
Giai on 4: Kt thc phin lm vic.
Sau khi to Socket xong, Client v Server c th trao i thng tin qua li vi nhau
thng qua hai hm sendto() v recvfrom(). n v d liu trao i gia Client v Server l
cc Datagram Package (Gi tin th tn). Protocol ca ng dng phi nh ngha khun
dng v ngha ca cc Datagram Package. Mi Datagram Package c cha thng tin v
a ch ngi gi v ngi nhn (IP, Port).
1.3.1.1. Lp java.net.Socket
Lp Socket h tr cc phng thc cn thit xy dng cc chng trnh client s
dng socket ch c ni kt. Di y l mt s phng thc thng dng xy
dng Client:
public Socket(String HostName, int PortNumber) throws IOException
Phng thc ny dng ni kt n mt server c tn l HostName, cng l
PortNumber. Nu ni kt thnh cng, mt knh o s c hnh thnh gia Client v
Server.
V d: ng Socket s:
s.close();
1.3.1.2. Chng trnh TCPEchoClient
Trn h thng UNIX, Dch v Echo c thit k theo kin trc Client-Server s
dng Socket lm phng tin giao tip. Cng mc nh dnh cho Echo Server l 7, bao
gm c hai ch c ni kt v khng ni kt.
Chng trnh TCPEchoClient s ni kt n EchoServer ch c ni kt, ln
lt gi n Echo Server 10 k t t 0 n '9', ch nhn kt qu tr v v hin th chng
ra mn hnh.
Hy lu chng trnh sau vo tp tin TCPEchoClient.java
import java.io.*;
import java.net.Socket;
Hai chng trnh ny c th nm trn hai my khc nhau. Trong trng hp khi
thc hin chng trnh TCPEchoClient phi ch nhp ng a ch IP ca my tnh ang
chy chng trnh STCPEchoServer.
Xem a ch IP ca mt my tnh Windows bng lnh ipconfig.
1.3.2.4. Server phc v song song
Cc bc tng qut ca mt Server phc v song song
Server phc v song song gm 2 phn thc hin song song nhau:
Phn 1: X l cc yu cu ni kt.
Phn 2: X l cc thng ip yu cu
t khch hng.
Bin Son: Ng B Hng - Nguyn Cng Huy Hnh 4.5 Server ch song song
69
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
import java.net.*;
import java.io.*;
public class PTCPEchoServer {
public final static int defaultPort = 7; // Cng mc nh
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(defaultPort); //To socket cho server
while (true) {
try {
Socket s = ss.accept(); // Lng nghe cc yu cu ni kt
RequestProcessing rp = new RequestProcessing(s); // To phn x l
rp.start(); // Khi ng phn x l cho Client hin ti
}
catch (IOException e) {
System.out.println("Connection Error: "+e);
}
}
}
catch (IOException e) {
System.err.println("Create Socket Error: "+e);
}
}
}
System.err.println(e);
}
Cc phng thc ly thng tin trn mt DatagramPacket nhn c
Khi nhn c mt DatagramPacket t mt qu trnh khc gi n, ta c th ly
thng tin trn DatagramPacket ny bng cc phng thc sau:
1.3.3.2. Lp DatagramSocket
Lp ny h tr cc phng thc sau gi / nhn cc DatagramPacket
public DatagramSocket() throws SocketException
Dng gi mt DatagramPacket i.
V d:
try {
DatagramSocket ds = new DatagramSocket(); //To Socket
byte[] b = new byte[60000]; // Ni cha d liu nhn c
DatagramPacket inPacket = new DatagramPacket(b, b.length); // To gi tin
ds.receive(inPacket); // Ch nhn gi tin
}
catch (IOException e) {
System.err.println(e);
}
1.3.3.3. Chng trnh UDPEchoServer
Chng trnh UDPEchoServer ci t Echo Server ch khng ni kt, cng
mc nh l 7. Chng trnh ch nhn tng gi tin, ly d liu ra khi gi tin nhn c v
gi ngc d liu v Client.
Lu chng trnh sau vo tp tin UDPEchoServer.java
import java.net.*;
import java.io.*;
public class UDPEchoServer {
public final static int port = 7; // Cng mc nh ca Server
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket(port); // To Socket vi cng l 7
byte[] buffer = new byte[6000]; // Vng m cha d liu cho gi tin nhn
while(true) { // To gi tin nhn
DatagramPacket incoming = new DatagramPacket(buffer,buffer.length);
ds.receive(incoming); // Ch nhn gi tin gi n
// Ly d liu khi gi tin nhn
String theString = new String(incoming.getData(),0,incoming.getLength());
// To gi tin gi cha d liu va nhn c
DatagramPacket outsending = new DatagramPacket(theString.getBytes(),
incoming.getLength(),incoming.getAddress(), incoming.getPort());
ds.send(outsending);
}
}
catch (IOException e) {
System.err.println(e);
}
}
}
import java.net.*;
import java.io.*;
public class UDPEchoClient extends Object{
public final static int serverPort = 7; // Cng mc nh ca Echo Server
public static void main(String[] args) {
try {
if (args.length ==0) { // Kim tra tham s, l a ch ca Server
System.out.print("Syntax: java UDPClient HostName");
return;
}
DatagramSocket ds = new DatagramSocket(); // To DatagramSocket
InetAddress server = InetAddress.getByName(args[0]); // a ch Server
while(true) {
InputStreamReader isr = new InputStreamReader(System.in); // Nhp
BufferedReader br = new BufferedReader(isr); // mt chui
String theString = br.readLine(); // t bn phm
byte[] data = theString.getBytes(); // i chui ra mng bytes
// To gi tin gi
DatagramPacket dp = new DatagramPacket(data,data.length,server, serverPort);
ds.send(dp); // Send gi tin sang Echo Server
byte[] buffer = new byte[6000]; // Vng m cho d liu nhn
// Gi tin nhn
DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
ds.receive(incoming); // Ch nhn d liu t EchoServer gi v
// i d liu nhn c dng mng bytes ra chui v in ra mn hnh
System.out.println(new String(incoming.getData(), 0, incoming.getLength()));
}
}
catch (IOException e) {
System.err.println(e);
}
}
}
1.4. Bi tp p dng
Ch 1: Client ch c ni kt
Mc ch:
Yu cu
Ch 2: Client - Server ch c ni kt
Mc ch:
o Vit cc chng trnh Client -Server theo ch c ni kt.
Yu cu
+ Client cho php ngi dng nhp cc php ton mun tnh theo cch
thc thng thng. V d: 100+200. Client to ra thng ip yu cu
theo ng dng do Server qui nh, m t v php ton mun Server
thc thi, ri gi sang Server, ch nhn kt qu tr v v in ra mn hnh.
Ch 3: Client-Server ch khng ni kt
Mc ch:
o Vit cc chng trnh Client -Server theo ch khng ni kt.
Yu cu
o Bi 1 : Vit chng trnh Talk theo ch khng ni kt. Cho php hai
ngi ngi trn hai my tnh c th tn gu (chat) vi nhau.
CHNG 5
RPC v RMI
Mc ch
Chng ny nhm gii thiu cch thc xy dng cc ng dng phn tn bng cc
c ch gi th tc t xa (RPC - Remote Procedure Call v RMI - Remote Method
Invocation)
Yu cu
Sau khi hon tt chng ny, bn c th:
Mt chng trnh Client c th kch hot cc phng thc xa trn mt hay nhiu
Server. Tc l s thc thi ca chng trnh c tri rng trn nhiu my tnh. y chnh
l c im ca cc ng dng phn tn. Ni cch khc, RMI l c ch xy dng cc
ng dng phn tn di ngn ng Java.
Server ng k tn cho
i tng c th c
gi t xa ca mnh vi
Dch v danh b
(Registry Server).
Client tm i tng
xa thng qua tn
c ng k trn
Registry Server (looks
up) v tip gi cc Hnh 5.4 Vai tr ca dch v tn
phng thc xa.
Hnh minh ha cng cho thy cch thc m h thng RMI s dng mt
WebServer sn c truyn ti m bytecodes ca cc lp qua li gia Client
v Server.
java.rmi.Naming
java.rmi.RMISecurityManager
java.rmi.RemoteException;
java.rmi.server.RemoteObject
java.rmi.server.RemoteServer
java.rmi. server.UnicastRemoteObject
1.3.4. V d minh ha
Trong v d ny chng ta nh ngha mt phng thc String sayHello() c gi
t xa. Mi khi phng thc ny c kch hot n s tr v chui "Hello World" cho
Client gi n.
Di y l cc bc xy dng ng dng:
Bc 01: To giao din (interface) khai bo cc phng thc c gi t
xa ca i tng.
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface InterfaceName extends Remote {
ReturnType remoteMethodOne() throws RemoteException;
ReturnType remoteMethodTwo() throws RemoteException;
...
}
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HelloItf extends Remote {
String sayHello() throws RemoteException;
}
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
public class ServerName {
public static void main(String args[]) {
if (System.getSecurityManager() == null) { // Ci t c ch bo mt
System.setSecurityManager(new RMISecurityManager());
}
try {
// To cc i tng t xa
// ng k tn cho cc i tng t xa
Naming.rebind(RegistryName", remoteObject);
...
}
catch (Exception e) {
System.out.println(Error: . . . + e);
}
}
}
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
public class HelloServer {
public static void main(String args[]) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
try {
Hello obj = new Hello();
Naming.rebind("HelloObject", obj);
System.out.println("HelloObject is registried");
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
import java.rmi.Naming;
import java.rmi.RemoteException;
public class Client {
public static void main(String args[]) {
String remoteObjectURL = "rmi://NameServer/RegistryName;
Interfacename object = null;
try {
object = (InterfaceName)Naming.lookup(remoteObjectURL);
object.remoteMethodOne();
...
}
catch (Exception e) {
import java.rmi.Naming;
import java.rmi.RemoteException;
public class HelloClient {
public static void main(String args[]) {
String helloURL = "rmi://172.18.211.160/HelloObject";
HelloItf object = null;
try {
object = (HelloItf)Naming.lookup( helloURL);
String message = object.sayHello();
System.out.println(message);
}
catch (Exception e) {
System.out.println("Client Error :" + e);
}
}
}
rmic RemoteClass
( To ra cc lp cho Skeleton v Stub: RemoteClass_Skel.class
RemoteClass_Stub.class)
rmic Hello.class
Cng mc nh l 1099.
grant {
// Allow everything for now
permission java.security.AllPermission;
};
java ClientName
1.4. Bi tp p dng
Mc ch:
Yu cu
Mc lc
Bin Son: Ng B Hng - Nguyn Cng Huy 92
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
CHNG 1..........................................................................................................................1
Tng quan v lp trnh truyn thng ....................................................................................1
1.1. C ch giao tip lin qu trnh l g ?.....................................................................2
1.2. Phn loi c ch giao tip lin qu trnh ................................................................2
1.3. M hnh tham kho OSI .........................................................................................3
1.4. Mng TCP/IP..........................................................................................................6
1.5. Dch v mng .........................................................................................................7
1.6. M hnh Client Server .........................................................................................7
1.6.1. Gii thiu.........................................................................................................7
1.6.2. V d v dch v Web......................................................................................8
1.6.3. Cc ch giao tip ........................................................................................9
1.6.3.1. Ch nghn :..........................................................................................9
1.6.3.2. Ch khng nghn:................................................................................9
1.7. Cc kiu kin trc chng trnh .............................................................................9
1.7.1. Kin trc n tng (Single-tier Architecture) ...............................................10
1.7.2. Kin trc hai tng (Two - Tier Architecture) ................................................10
1.7.2.1. Loi Fat Client........................................................................................11
1.7.2.2. Loi Fat Server .......................................................................................12
1.7.3. Kin trc a tng (N-Tier Architecture)........................................................12
1.8. Bi tp...................................................................................................................13
1.8.1. Bi tp bt buc.............................................................................................13
1.8.2. Bi tp gi ..................................................................................................13
Tm c v vit mt bo co khng qu 10 trang v giao thc POP3...............................13
CHNG 2........................................................................................................................14
S lc v ngn ng Java ..................................................................................................14
1.1. Gii thiu v ngn ng Java.................................................................................15
1.1.1. Lch s pht trin...........................................................................................15
1.1.2. Kh nng ca ngn ng Java.........................................................................15
1.1.2. Nhng c im ca ngn ng Java .............................................................15
1.1.3. My o Java (JMV - Java Virtual Machine) .................................................15
1.1.4. Hai kiu ng dng di ngn ng java.........................................................16
1.1.5. B pht trin ng dng Java (JDK- Java Development Kit) ........................16
1.1.6. Kiu d liu c bn di Java.......................................................................16
1.1.7. Cc php ton c bn ....................................................................................17