1 / 23

Introduction to Socket Programming

Advisor: Quincy Wu Speaker: Kuan-Ta Lu Date: Nov. 25, 2010. Introduction to Socket Programming. Socket Interface. 是一種應用程式介面( API) ,介於 application 層與 transport 層之間,並且提供標準的函式以符合不同的網路傳輸規格。

abdalla
Download Presentation

Introduction to Socket Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Advisor: Quincy Wu Speaker: Kuan-Ta Lu Date: Nov. 25, 2010 Introduction to Socket Programming

  2. Socket Interface • 是一種應用程式介面(API),介於application層與transport層之間,並且提供標準的函式以符合不同的網路傳輸規格。 • 最早的Socket Interface於1982年由柏克萊大學為支援UNIX作業系統上的TCP/IP應用所開發的Socket介面,稱為Berkeley Socket Interface,而其軟體則稱為Berkeley Software Distribution(BSD)。 • Windows Sockets,簡稱Winsock,是以UNIX系統上Berkeley Sockets的函式為基礎,並加上了一些符合視窗環境特性的函式。

  3. Socket Interface (con.)

  4. Connection-oriented socket (TCP)

  5. socket() • Create an endpoint for communication • int socket( int domain, int type, int protocol ); • domain • PF_INET for IPv4 • PF_INET6 for IPv6 • type • SOCK_STREAM for reliable TCP sockets • SOCK_DGRAM for unreliable fast UDP sockets • protocol • default: 0

  6. bind() • Bind a name to a socket • int bind( int s, const struct sockaddr * name, socklen_t namelen ); • s • The file descriptor to be bound. • name • A pointer to the sockaddr structure that holds the address to be bound to the socket. • namelen • The length of the sockaddr structure pointed to by name.

  7. bind() (con.) • struct sockaddr { sa_family_t sa_family; // address family, AF_xxx char sa_data[14]; // 14 bytes of protocol address }; • sa_family • represents address family • sa_data • contains data about address

  8. bind() (con.) • struct in_addr { uint32_t s_addr; // 32bit IPv4 address (4 bytes) // network byte ordered }; struct sockaddr_in { sa_family_t sin_family; // Address family (2 bytes) in_port_t sin_port; // Port number (2 bytes) struct in_addr sin_addr; // Internet address (4 bytes) char sin_zero[8]; // Empty (for padding) (8 bytes) }

  9. bind() (con.) • Example: struct sockaddr_in servaddr; servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(13); Bind (sockfd, (struct sockaddr *) & servaddr, sizeof(servaddr) );

  10. listen() • Listen for connections on a socket • int listen( int s, int backlog ); • s • The descriptor for the socket that you want to listen on. • backlog • The maximum length that the queue of pending connections may grow to.

  11. connect() • Initiate a connection on a socket • int connect( int s, const struct sockaddr * name, socklen_t namelen ); • s • The descriptor of the socket on which to initiate the connection. • name • The name of the socket to connect to for a SOCK_STREAM connection. • namelen • The length of the name, in bytes.

  12. accept() • Accept a connection on a socket • int accept( int s, struct sockaddr * addr, socklen_t * addrlen ); • s • The listen()ing socket descriptor. • addr • This is filled in with the address of the site that's connecting to you. • addrlen • This is filled in with the sizeof() the structure returned in the addr parameter. You can safely ignore it if you assume you're getting a struct sockaddr_in back, which you know you are, because that's the type you passed in for addr.

  13. send() • Send a message to a connected socket • ssize_t send( int s, const void * msg, size_t len, int flags ); • msg • A pointer to the message that you want to send. • len • The length of the message. • flags • Set flags to zero if you want it to be "normal" data.

  14. recv() • Receive a message from a socket • ssize_t recv( int s, void * buf, size_t len, int flags ); • buf • A pointer to a buffer where the function can store the message. • len • The size of the buffer. • flags • Set flags to 0 if you want it to be a regular vanilla recv().

  15. close() • Close a socket descriptor • int close(int s); • Windows users: the function you need to use is called closesocket(), not close().

  16. Connectionless socket (UDP)

  17. sendto() • Send a message to a socket at a specific address • ssize_t sendto( int s, const void * msg, size_t len, int flags, const struct sockaddr * to, socklen_t tolen ); • to • A pointer to a sockaddr object that specifies the address of the target. • tolen • A socklen_t object that specifies the size of the to address.

  18. recvfrom() • Receive a message from the socket at a specified address • ssize_t recvfrom( int s, void * buff, size_t len, int flags, struct sockaddr * from, socklen_t * fromlen ); • from • NULL, or a pointer to a sockaddr object where the function can store the source address of the message. • fromlen • A pointer to a socklen_t object that specifies the size of the from buffer. The function stores the actual size of the address in this object.

  19. inet_ntop() inet_pton() • Convert IP addresses to human-readable form and back • const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); int inet_pton(int af, const char *src, void *dst); • The "n" stands for "network", and "p" for "presentation". • These functions are for dealing with human-readable IP addresses and converting them to their binary representation for use with various functions and system calls.

  20. IPv4 v.s IPv6 Socket

  21. Demo • Environment • OS: Fedora 14 • Client(homer): 10.21.10.154 2001:e10:6840:21:4a5b:39ff:fed6:1b73 • Server(sinbad): 10.10.21.70 2001:e10:6840:21:21a:92ff:fe02:3495 • Socket TCP (IPv4): tcp4_client.c, tcp4_server.c • Socket UDP (IPv4): udp4_client.c, udp4_server.c • Socket TCP (IPv6): tcp6_client.c, tcp6_server.c

  22. Reference • http://beej.us/guide/bgnet/output/html/multipage/index.html • http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/sys_arch/tcpip.html • http://ms11.voip.edu.tw/~jryan/ref/20090326-chenglin-socket_programming.ppt • http://ms11.voip.edu.tw/~jryan/ref/SocketIntro.ppt • http://ms11.voip.edu.tw/~jryan/ref/Introduction_to_IPv6_programming.pdf • http://ms11.voip.edu.tw/~jryan/ref/Windows_Socket Programming_&_IPv6_Translation Middleware.pdf • http://zh.wikipedia.org/zh-tw/%E4%BC%AF%E5%85%8B%E5%88%A9%E5%A5%97%E6%8E%A5%E5%AD%97 • http://ms11.voip.edu.tw/~jryan/ref/csb051-02-netprog.pdf • http://ms11.voip.edu.tw/~jryan/ref/ipv6_socket_programming.ppt

  23. Thanks for listening~

More Related