Professional Documents
Culture Documents
Ch
Nm c cc bc (gii thut) lp trnh chng
trnh Client
Bit cch s dng cc hm Socket API trong lp
trnh Client
Thc hnh lp trnh mt chng trnh Client n
gin
Ni dung
4.1) Cu trc tng qut chng trnh Client
4.2) Gii thut tng qut chng trnh Client
4.3) Cch gi hm Socket API trong tng bc
trong h thng
Khng yu cu nhiu ti nguyn v khng cn
hot ng lin tc
server
Gi bn tin yu cu n Server
Client/Server
X l d liu trc khi gi v sau khi nhn
Thao tc vi b m buffer cha d liu
Hin th trng thi phin lm vic
Thng bo v x l li gp phi
c/ghi d liu t tp tin
socket
Bc 4 ->5 c thc hin bi module thc thi
giao thc (module chnh)
Bc 1 3 l thao tc chung i vi mi Client
Bc 4 v 5 ty theo tng giao thc ng dng
TCP/IP
Cc cng on xy dng chng trnh gm:
Cc chc nng b tr: truy vn thng tin, thng bo
li
Lp trnh module kt ni
Lp trnh module tng tc vi Server theo giao
thc ng dng Echo
Lp chng trnh chnh
server
Client gi n Server 1 bn tin l mt xu k t bt
k
Server gi tr li mt bn tin vi ni dung hon
ton trng vi bn tin m client gi n
V d:
s hm main l tn server
TCPEchoClient.exe <tn server>
Nu kt ni thnh cng, nhp bn tin l xu k t
Cc tp m ngun ca project
socketbasic.cpp: Module chc nng khi to v
Bc 1: Xc nh a ch socket
pha Server
Client
Server
transport
network
interface
transport
network
interface
Internet
Xc nh a ch Socket ca
server ntn ?
UDP
TCP
POP3
a ch Socket ca tin trnh Server
- Kiu Socket (TCP hay UDP)
- Cng
- a ch IP
dng
FTP :
TCP socket
POP3: TCP socket
DNS: UDP socket
S cng: chn cng ca dch v tng ng
FTP: 21
POP3: 110
ftp.nuce.edu.vn
220.231.122.114
C 2 cch ly a ch IP
Nu bit hostname, v d: ftp.nuce.edu.vn
S dng hm API gethostbyname ly thng tin
220.231.122.114
S dng hm API inet_addr chuyn i thnh
a ch IP dng s 32 bit
Cch ly s cng
Nu bit s cng trc tip, v d 80, 7 hoc 21
S dng hm htons bin i s cng sang dng
NBO
Nu ch nh tn dch v, v d HTTP, ECHO, FTP
S dng hm API getservbyname truy vn
struct sockaddr_in
Chng trnh cn khai bo mt bin kiu struct
sockaddr_in v gn gi tr cng, a ch IP va ly
c cho cc trng d liu tng ng
struct sockaddr_in sin; // bin cu trc a ch socket
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = server_addr.s_addr; //gn a ch IP
sin.sin_port = server_port; // gn s cng
Bc 2: To local socket ti
Client
Mi socket c tham chiu bi mt bin kiu
SOCKET
S dng hm API socket to 1 socket mi
SOCKET s = socket(PF_INET, sock_type, 0);
Tip
Nu thnh cng, hm socket tr v mt gi tr
kiu SOCKET
Nu khng thnh cng, hm tr v gi tr hng
INVALID_SOCKET
Bc 3: Kt ni n remote
socket ti Server
Gi hm API connect v truyn tham s cn thit
kt ni vi socket ti server
int ret = connect(s, (struct sockaddr*) &sin, sizeof(sin));
if(ret==SOCKET_ERROR)
errexit(GetLastError(), "Khong ket noi duoc voi server: %s,
%s", host, service);
Nu gi tr tr v ret == SOCKET_ERROR
Ch
C nhiu kh nng xy ra li khi kt ni
Server khng tr li
Server t chi kt ni
Time out do tr truyn d liu
buffer (b nh)
Gi hm API send gi bn tin qua socket
buffer
int byte_recv = recv(s, buffer, sizeof(buffer), 0);
Hm send v recv
Nu gi d liu thnh cng, hm tr v s byte
d liu gi
Ngc li, hm tr v gi tr SOCKET_ERROR
tm nguyn nhn gy li, gi hm
GetLastError()
Tng t, hm recv tr v s byte nhn c,
nu thnh cng, tr v SOCKET_ERROR nu
gp li
char
char buffer[512]; // vng m 512 bytes
Bc 5: ng kt ni
Sau khi kt thc gi/nhn cc bn, client c th
ng kt ni
Gi hm API closesocket
closesocket(s)
Bi tp
Bi 1: Bit tn web server ca HXD l
hi v in ra mn hnh
Gi bn tin GET /administrator HTTP/1.1\r\n,
nhn bn tin phn hi v in ra mn hnh
Tip
Bi 3: To giao din command line cho chng
hoc a ch IP ca server
Gi bn tin: lnh msg, tham s l ni dung bn tin
trn 1 dng
ng kt ni: lnh close
Thot khi chng trnh: lnh quit
Kt ni UDP socket
ngha ca vic gi hm connect vi UDP
socket
nht.
Sau c th dng hm send() v recv()
gi nhn d liu ging nh vi TCP socket
u im: thun tin khi client ch tng tc
vi mt server
Nu mun thay i a ch socket mi ln gi
hoc nhn d liu, s dng hm sendto v
recvfrom
Hm sendto v recvfrom
sendto l hm gi d liu dnh ring cho
UDP socket
int sendto( SOCKET s, const char *buf, int len, int flags,
const struct sockaddr *to, int tolen );
Ch
Khi gi hm connect() vi UDP socket, hm
ng socket
ng socket UDP l gii phng ti nguyn
gn cho socket
Do tnh cht khng lin kt ca UDP, nu mt
pha (v d l Client) ng socket th pha bn
kia khng nhn bit c s kin
UDP thch hp cho cc ng dng cn tc
m khng cn tin cy v lin kt cht ch
gia Client v Server