Socket - PowerPoint PPT Presentation

1 / 35
About This Presentation
Title:

Socket

Description:

Title: 1 Author: Aquarius Last modified by: Created Date: 5/20/2004 10:26:45 AM Document presentation format: Company – PowerPoint PPT presentation

Number of Views:54
Avg rating:3.0/5.0
Slides: 36
Provided by: Aqu64
Category:
Tags: aquarius | socket

less

Transcript and Presenter's Notes

Title: Socket


1
Socket
  • ??Win32 API

2
????????
3
???Socket
  • ??????????????????????
  • socket,?????????????,????
  • ????????
  • ???5???
  • socket() ? ??
  • bind() ? ??(?????)
  • listen() ? ?????(????)
  • connect() ? ?????
  • accept() ? ????

4
Socket??,??????
5
socket ( )??
  • int SOCKET socket(
  • int af,
  • int type,
  • int protocol
  • )
  • af ??????(family),???????????
  • type????
  • Protocal??????
  • ???-1????socket????
  • ??????????,??socket descriptor
  • (socket???)

6
????
  • af ??AF_INET ? Internet address family
  • ????????????
  • unsigned long(?????)
  • typeSOCK_STREAM ????????(TCP?)
  • SOCK_DGRAM ???????(UDP?)
  • protocal ??IPPROTO_TCP (TCP????)
    ???0,??????

7
??
  • SOCKET sock //??
  • sock socket( //??
  • AF_INET,
  • SOCK_STREAM,
  • IPPROTO_TCP
  • )

8
Bind??,???????
9
Bind()??
  • int bind(
  • SOCKET s,
  • const struct sockaddr name,
  • int namelen
  • )
  • s ????????socket
  • name ???????,?????sockaddr
  • namelen name?????(??byte)
  • ???-1???,???0

10
Sockaddr_in ??(IPv4?)
  • struct sockaddr_in short sin_family u_short
    sin_port
  • struct in_addr sin_addr
  • char sin_zero8
  • sin_family??????,?????AF_INET
  • sin_port????????? ?htons() ??
  • sin_addr??IP?? in_addr????
  • sin_zero8?????,??????

11
in_addr??
  • typedef struct in_addr union
  • struct u_char s_b1,s_b2,s_b3,s_b4
    S_un_b struct u_short s_w1,s_w2
    S_un_w u_long S_addr S_un
  • in_addr
  • ???union????,?????????32bit????
  • ??????u_long S_addr???? ?IP????????
  • ???????????????
  • define s_addr S_un.s_addr
  • ???????????sin_addr.s_addr????
  • ?????inet_addr(IP????)???unsigned long

12
??
  • SOCKET Sock
  • sockaddr_in saServer
  • Sock socket(
  • AF_INET,
  • SOCK_STREAM,
  • IPPROTO_TCP
  • )
  • // ??????????
  • saServer.sin_family AF_INET
  • saServer.sin_port htons(5150) //??5150 port
  • saServer.sin_addr.s_addr inet_addr(140.115.65.3
    0) //????IP
  • // ??Bind??
  • bind(Sock,(SOCKADDR) saServer, sizeof(saServer)
    )

13
Listen?? ??socket??????
  • listen()??Socket????????,?????(Client)
    ????,????????????,?????????(Server)?
  • ???Client?????,??????connect()??Server
    ????Server????????socket?Client??,listen
    socket?????????Client,???????

14
listen()??
  • int listen(
  • SOCKET s,
  • int backlog
  • )
  • s???bind(),???????socket
  • Backlog??Server?????,???????
  • ???-1???,???0

15
Accept?? ??????
Blocking Non-blocking
16
Accept() ??
  • SOCKET accept(
  • SOCKET s,
  • struct sockaddr addr,
  • int addrlen
  • )
  • s?????listen???socket
  • sddrClient?????,?????????
  • addrlensddr??,???????
  • ???-1????,?????????Client?????socket
    descriptor,???????
  • ??accept()?listen socket?????????????,??????accep
    t()???????????Server?Client????socket,????????????
    ??

17
??
  • ListenSocket ???bind()??????socket
  • // ??socket????????
  • if (listen( ListenSocket, 1 ) SOCKET_ERROR)
  • printf("Error listening on socket.\n")
  • // ???????Client????socket
  • SOCKET AcceptSocket
  • // ??????
  • while(1)
  • AcceptSocket SOCKET_ERROR
  • //????socket descriptor,???????????
  • while( AcceptSocket SOCKET_ERROR )
  • AcceptSocket accept( ListenSocket, NULL,
    NULL )
  • printf("Client connected.\n")
  • break

18
connect?? ??????socket??
  • Client????Server??,????connect????,???????????,??
    ???????
  • ????(three-way handshake)??
  • 1.Client?Server??????(connect())
  • 2.Server?????,???Clinet????
  • 3.Client????,?Server??????
  • ??????????,??????????
  • ?????,??????????ICMP????
  • connect?????,????????

19
connect()??
  • int connect(
  • SOCKET s,
  • const struct sockaddr name,
  • int namelen
  • )
  • ???????bind()??
  • name????
  • ???-1???,????0

20
recv(),send()?? ??????
  • ??????Server?Client??????,?????????????recv(),sen
    d()?????????,??????????????,read(),
  • write(),readv(),writev(),recvmsg(),
  • sendmsg()??,????recv()?send()?????,???????????MSD
    N? man ????

21
recv() ??
  • int recv(
  • SOCKET s,
  • char buf,
  • int len,
  • int flags
  • )
  • s?????????socket
  • buf??recv,????????????
  • lenbuf???(byte)
  • flags??????,????0
  • ???-1???,????????????(byte)

22
send()??
  • int send(
  • SOCKET s,
  • const char buf,
  • int len,
  • int flags
  • )
  • s?????????socket
  • buf?????????????
  • lenbuf???(byte)
  • flags??????,????0
  • ???-1???,???????????(byte)

23
??
  • //Server?
  • int bytesSent
  • int bytesRecv SOCKET_ERROR
  • char sendbuf32 "Server Sending Data."
  • char recvbuf32 ""
  • bytesRecv recv( m_socket, recvbuf, 32, 0 )
  • printf( "Bytes Recv ld\n", bytesRecv )
  • bytesSent send( m_socket, sendbuf,
    strlen(sendbuf), 0 )
  • printf( "Bytes Sent ld\n", bytesSent )
  • //Client?
  • int bytesSent
  • int bytesRecv SOCKET_ERROR
  • char sendbuf32 "Client Sending data."
  • char recvbuf32 ""
  • bytesSent send( m_socket, sendbuf,
    strlen(sendbuf), 0 )
  • printf( "Bytes Sent ld\n", bytesSent )

24
closesocket(),shutdown()?? ????
  • ?accept()?connect()?????????socket,???Client?Serv
    er??closesocket()?shutdown()??????
  • closesocket()??????TCP??,???????,?????socket?????
    ?????,??TCP???????sliding window??,?????????,?shut
    down()?????????????,????socket?IO?
  • ??????????????
  • 1.??????
  • 2.??shutdown(),?????????
  • 3.??recv(),??????????0,??????
  • 4.closesocket() ???socket
  • ??Winsock????closesocket()?BSD
    socket??close()????

25
closesocket() ? shutdown()??
  • int closesocket(
  • SOCKET s
  • )
  • int shutdown(
  • SOCKET s,
  • int how
  • )
  • s????socket
  • how??socket?????
  • SD_RECEIVE ????(disable recv()??)
  • SD_SEND ????(disable send()??)
  • SD_BOTH ????
  • ???-1???,????0

26
Server-Client Model
recv() send()
27
WINSOCKETS
  • include ltwinsock2.hgt

28
WINSOCKETS
  • WSADATA wsadata
  • if (WSAStartup(0x101,(LPWSADATA) wsadata) ! 0)
  • fprintf(stderr,"echo_srv can't use WinSock
    DLL\n") exit(1)

29
WINSOCKETS
  • WSACleanup()

30
Server??????
  • ListBox ?????????? ListBox1-gtItems-gtAdd()?????
    ?ListBox1-gtItems-gtInsert()????Add(??),
    Insert(??,??)????Server?????????,??????

31
Server??????
  • Timer ?????,????

32
Server??????
  • define A B ??A?B,???define Add(Text)
    ListBox1-gtItems-gtInsert(0,Text)?????????Add(??)
    ????????Insert??
  • ?define????????(???),?????????????

33
Server??????
  • ????????????WSAStartupsocketbindlisten
  • ?????????shutdownclosesocket

34
Server??????
  • ?Timer?????????? recv???? ?? accept
    ????
  • !accept recv ???????(?????????)?????????????

35
Server?????????
  • 1. ???????WSAAcceptExWSARecvWaitForSingleObject
  • 2. ????
  • 3. ???
Write a Comment
User Comments (0)
About PowerShow.com