Professional Documents
Culture Documents
Ni dung chnh
Gii thiu socket Hng dn vit mt ng dng mng Server-Client bng socket Gii thiu mt s hm c bn ca lp CSocket. Minh ha ng dng chat n gin gia client v server
Socket
Sockets cung cp mt interface lp trnh mng ti tng Transport. Mt socket l
mt end-point ca mt lin kt gia hai ng dng. Ngy nay, Socket c h tr trong hu ht cc h iu hnh nh MS Windows (WinSock), Linux v c s dng trong nhiu ngn ng lp trnh khc nhau: nh C, C++, Java, Visual Basic, C#, . . . Windows Socket Application Programming Interface (Winsock API) l mt th vin cc hm socket. Winsock h tr cc lp trnh vin xy dng cc ng dng mng trn nn TCP/IP.
kin trc Client-Server v giao thc s dng tng Transport l TCP bng Socket.
Trang 1
Lp trnh socket
SERVER To socket lng nghe kt ni socket() ng k tn cho socket bind() Lng nghe kt ni t client listen()
i 1 kt ni n t Client
CLIENT
Kt ni n server connect()
Chp nhn mt kt ni t Client (socket mi c to) accept() Truyn/nhn d liu send()/receive() ng kt ni (socket ca connection) close() Truyn/nhn d liu send()/receive()
ng kt ni close()
Trong giai on truyn nhn d liu, vic trao i d liu gia Client v Server phi tun th theo giao thc ca ng dng. Ghi ch: nu chng ta pht trin ng dng theo cc giao thc nh ngha sn, chng ta phi tham kho v tun th ng nhng qui nh ca giao thc (tham kho trong cc ti liu RFC (Request For Comments)). Nu xy dng ng dng dng Peer-to-Peer, th mt ng dng phi c c chc nng client v server trong m hnh trn.
Mt s hm c bn trong lp CSocket
Trang 2
Lp trnh socket
qun l vic truyn v nhn d liu thng qua socket. Trong phn ny, chng ta s kho st mt s hm c bn trong lp CSocket. Cc hm khc cc bn tham kho trong MSDN: http://msdn.microsoft.com/en-US/library/65bbyctt%28v=VS.80%29.aspx Khi to Socket
BOOL AfxSocketInit( WSADATA* lpwsaData = NULL );
Trc khi s dng cc hm ca lp CSocket, chng ta phi gi hm ny khi to Windows Socket vi tham s lpwsaData gn bng NULL. Nu lpwsaData khng bng NULL th a ch ca tham s ny phi ly t hm WSAStartup. To socket
BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, LPCTSTR lpszSocketAddress = NULL );
- nSocketPort: port ca socket; nu bng 0 th port s c MFC chn ngu nhin. - nSocketType l SOCK_STREAM (TCP) hay SOCK_DGRAM (UDP). - lpszSocketAddress: a ch IP ca host dng socket. Nu dng NULL, socket s lng nghe hot ng ca client trn tt c cc card mng. Gi tr tr v: khc 0 nu thnh cng; ngc li th bng 0 v m li c th s c cho khi gi hm GetLastError. Ghi ch: gii thch ca cc thnh phn s c s dng trong cc hm sau hm GetLastError dng ly m li c th khi xy ra li trong qu trnh thc hin cc hm. Do , cc hm v sau, nu c li th dng hm ny ly m li
Trang 3
Lp trnh socket
- lpSockAddr: tr n cu trc SOCKADDR cha a ch IP ca host dng socket. - nSockAddrLen: chiu di ca a ch lpSockAddr c tnh theo byte. Gi tr tr v: khc 0 nu thnh cng; ngc li bng 0. Gii phng/ng socket Close() Kt ni n server
BOOL Connect( LPCTSTR lpszHostAddress, UINT nHostPort ); BOOL Connect( const SOCKADDR* lpSockAddr, int nSockAddrLen );
- lpszHostAddress: a ch IP ca Server. - nHostPort: Port ca socket lng nghe kt ni trn Server. - lpSockAddr: tr n cu trc SOCKADDR cha a ch IP ca Server. - nSockAddrLen: chiu di ca a ch trong lpSockAddr c tnh theo byte.
Trang 4
Lp trnh socket
- Hm ny ch h tr cho socket dng SOCK_STREAM. - nConnectionBacklog: chiu di ti a m hng i kt ni cha c chp nhn c th tng. Min gi tr t 1 n 5. Gi tr tr v: khc 0 = thnh cng, bng 0 = tht bi. Chp nhn mt kt ni
virtual BOOL Accept( CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL );
- rConnectedSocket: tham chiu nh danh socket ca kt ni c chp nhn. - lpSockAddr tr n cu trc SOCKADDR nhn a ch IP ca socket kt ni n. - Nu lpSockAddr hay lpSockAddrLen ly gi tr mc nh NULL th s khng c thng tin t socket (trn client) c chp nhn c tr v. - lpSockAddrlen cha chiu di thc s ca lpSockAddr khi tr v theo byte. Gi tr tr v: khc 0 nu thnh cng v bng 0 nu tht bi. Nhn d liu
virtual int Receive( void* lpBuf, int nBufLen, int nFlags = 0 );
Trang 5
Lp trnh socket
- lpBuf: vng m cha d liu. - nBuffLen: kch thc ca vng m tnh theo byte. - nFlag: cch nhn d liu, s dng gi tr mc nh l 0. - Gi tr tr v l s byte nhn c, nu socket ng th gi tr tr v l 0, ngoi ra gi tr s tr v l SOCKET_ERROR. Gi d liu
virtual int Send( const void* lpBuf, int nBufLen, int nFlags = 0
);
- lpBuf: vng m cha d liu truyn i. - nBufLen: chiu di vng m. - nFlag: cch truyn d liu, s dng gi tr mc nh l 0. - Gi tr tr v l s k t c gi, nu tht bi gi tr tr v l SOCKET_ERROR.
Trang 6
Lp trnh socket
format thng ip truyn gia client v server: <Chiu di thng ip><Thng ip> 5. Lp trnh: xem chi tit mc 4.1 v 4.2 4.1 Server Khai bo bin:
CSocket server, client;
Trang 7
Lp trnh socket // hien thi chuoi nhan duoc ra man hinh printf("\nCleint: %s",r_str); }while(strcmp(r_str,"exit")&&strcmp(s_str,"exit"));
ng kt ni v socket ca Server
client.Close(); server.Close();
To socket kt ni n server
client.Create();
Connect n Server
client.Connect(svrAddr,1234)
ng kt ni
client.Close();
Trang 8