seminar socket

25
LOGO TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN BỘ MÔN MẠNG MÁY TÍNH – KHOA CNTT Môn: Mạng máy tính LẬP TRÌNH SOCKET Lê Quốc Hòa [email protected] 1

Upload: thandieu023

Post on 25-Sep-2015

216 views

Category:

Documents


9 download

DESCRIPTION

Seminar Socket

TRANSCRIPT

  • Ni dung chnh*

  • Gii thiu v SocketSockets cung cp mt interface lp trnh mng ti tng Transport.Mt socket l mt end-point ca mt lin kt gia hai ng dng mng. Nhiu NNLT: C, C++, Java, VB, C#, . . .Windows Socket Application Programming Interface (Winsock API) Winsock h tr xy dng cc ng dng mng trn nn TCP/IP. *

  • Ni dung chnh*

  • Cc bc cn thc hin:1. Xc nh kin trc mng: Client Server, Peer-to-Peer 2. Giao thc s dng tng Transport: TCP, UDP 3. Cc port s dng Server v Client 4. Giao thc tng ng dng khi trao i d liu gia hai end-host 5. Lp trnh

    Xy dng UD Client-Server vi Socket*

  • 1/ Xc nh bi tp v n:Kin trc Client ServerGiao thc s dng tng Transport l TCP

    2/ Ghi ch:XD UD theo giao thc tng UD c nh ngha sn phi tun th ng quy nh tham kho RFC (request for comment)Peer-to-Peer: 1 UD c c Client - Server Xy dng UD Client-Server vi Socket*

  • SERVERCLIENTTo socket lng nghe kt ni v ng k port cho socketServer.Create (port)Lng nghe CC kt ni t clientServer.Listen()i 1 kt ni n t ClientTo socket kt ni n serverClient.Create ()Kt ni n ServerClient.Connect (IP, port)Chp nhn 1 kt ni t clientServer.Accept(s)Truyn/Nhn d liu vi client ss.Send() / s.Receive()Truyn/Nhn d liu vi client sClient.Send() / Client.Receive()ng kt niServer.Close()ng kt niClient.Close() Xy dng UD Client-Server vi Socket*

  • Ni dung chnh*

  • Mt s hm c bn trong lp CSocketCSocket (c h tr trong MFC) qun l vic truyn v nhn d liu thng qua socketTham kho trong MSDN: http://msdn.microsoft.com/en-US/library/65bbyctt%28v=VS.80%29.aspx *

  • Mt s hm c bn trong lp CSocketKhi to Socket

    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. *

    BOOL AfxSocketInit( WSADATA* lpwsaData = NULL );

  • Mt s hm c bn trong lp CSocketTo socket

    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. *

    BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, LPCTSTR lpszSocketAddress = NULL );

  • Mt s hm c bn trong lp CSocketLng nghe cc yu cu kt ni

    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.Gi tr tr v: khc 0 thnh cng, bng 0 tht bi.

    *

    BOOL Listen( int nConnectionBacklog = 5 );

  • Mt s hm c bn trong lp CSocketChp nhn mt kt ni

    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. *

    virtual BOOL Accept( CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL );

  • Mt s hm c bn trong lp CSocketKt ni n server

    lpszHostAddress: a ch IP ca Server. nHostPort: Port ca socket lng nghe kt ni trn Server. Gi tr tr v: khc 0 nu thnh cng; ngc li, tht bi = 0.

    *

    BOOL Connect( LPCTSTR lpszHostAddress, UINT nHostPort );

  • Mt s hm c bn trong lp CSocketTruyn/nhn d liu

    lpBuf: vng m cha d liu. nBuffLen: kch thc ca vng m tnh theo byte. nFlag: cch nhn/truyn d liu, s dng gi tr mc nh l 0. Gi tr tr v l s byte nhn/truyn c

    *

    virtual int Send/Receive( const void* lpBuf, int nBufLen, int nFlags = 0 );

  • Th d minh haBi ton 1: vit mt ng dng chat tun t gia Server Client (Server chat trc).

    Xc nh 4 bc trc khi lp trnh:1. Xc nh kin trc mng: ?2. Giao thc s dng tng Transport: ?3. Cc port s dng Server v Client: Server - ? 4. Giao thc tng ng dng khi trao i d liu gia hai end-host: + server client server client + format thng ip truyn gia client v server:

    *

  • Th d minh haXt kch bn trong bi ton 1

    M hnh: 1 server 1 client

    *

  • Th d minh ha*Bi ton 2: N clients s gi cho server 2 s t 0 10. Cc client lun phin nhau gi theo 2 lt. Server m s lng cc s Nguyn t c gi ln v thng bo kt qu cho tt c client.

    Xc nh 4 bc trc khi lp trnh: ?Giao thc tng ng dng khi trao i d liu gia hai end-host: + N clients server N clients + format thng ip truyn gia client v server:

  • Th d minh haXt kch bn trong bi ton 2

    M hnh: 1 server N clients

    *

  • Ni dung chnh*

  • DemoCch to 1 projectCode demo Bi ton 1: Server v Client chat tun tCode demo Bi ton 2: N clients gi ln Server, Server tnh ton gi tr kt qu v cho cc clientsGii thch 1 s kch bn trong Xt kch bn ng k tn (nickname)Xt kch bn server pht sinh l bi gi cho clients*

  • Demo: cch to 1 project*

  • Demo: cch to 1 project*

  • Demo code chat 1S 1C*

    Server (include afxsock.h)Client (include afxsock.h)CSocket server, s; //khai bo bin

    AfxSocketInit(NULL); // kt Windows Socket

    if (!server.Create(1234)) { // c portprintf(That bai roi nhe"); exit(); } // to socketserver.Listen(); // lng ngheserver.Accept(client) ; // chp nhn kt nido { printf("\nServer: "); gets(s_str); len = strlen(s_str); s.Send(s_str,len,0); len = s.Receive(r_str,100,0); // gn k t kt thc chui r_str[len] = 0; // hin th chui nhn cprintf("\nCleint: %s",r_str); }while(strcmp(r_str,"exit")&&strcmp(s_str,"exit")); s.Close(); server.Close(); CSocket client;

    AfxSocketInit(NULL);

    client.Create(); // khng c port

    client.Connect(svrAddr,1234) ; // kt ni

    do { len = client.Receive(r_str,100,0); r_str[len] = 0; printf("\n Server: %s",r_str); printf("\n Client: "); gets(s_str); client.Send(s_str,strlen(s_str),0); }while(strcmp(r_str,"exit")&&strcmp(s_str,"exit"));

    client.Close();

    LOGO

    *

    Company Logo

    *