computer betwork for forth grades, Thesis of Computer Vision

computer betwork for forth grades

Typology: Thesis

2017/2018

Uploaded on 06/29/2018

bilalrabah
bilalrabah 🇮🇶

1 document

1 / 35

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Socket'Programming'
151441'Computer'Networks,'Spring'2010'
Your'TAs'
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23

Partial preview of the text

Download computer betwork for forth grades and more Thesis Computer Vision in PDF only on Docsity!

Socket Programming

15-­‐441 Computer Networks, Spring 2010

Your TAs

Lecture Today

• MoCvaCon for sockets

• What’s in a socket?

• Working with socket

• Concurrent network applicaCons

• Project 1

IdenCfy the DesCnaCon

Connection socket pair

HTTP Server

(port 80)

Client

Client socket address

Server socket address

Client host address

Server host address

FTP Server

(port 21)

• Addressing

– IP address

– hostname (resolve to IP address via DNS)

• MulCplexing

– port

Sockets

• How to use sockets

– Setup socket

• Where is the remote machine (IP address, hostname)

• What service gets the data (port)

– Send and Receive

• Designed just like any other I/O in unix

• send -­‐-­‐ write

• recv -­‐-­‐ read

– Close the socket

Step 1 – Setup Socket

• Both client and server need to setup the socket

– int socket(int domain, int type, int protocol);

• domain

– AF_INET -­‐-­‐ IPv4 (AF_INET6 for IPv6)

• type

– SOCK_STREAM -­‐-­‐ TCP

– SOCK_DGRAM -­‐-­‐ UDP

• protocol

• For example,

– int sockfd = socket(AF_INET, SOCK_STREAM, 0);

Step 2 (Server) -­‐ Binding

• Only server need to bind

– int bind(int sockfd, const struct sockaddr *my_addr,

socklen_t addrlen);

• sockfd

– file descriptor socket() returned

• my_addr

– struct sockaddr_in for IPv

– cast (struct sockaddr_in) to (struct sockaddr)

struct sockaddr_in { short sin_family; // e.g. AF_INET unsigned short sin_port; // e.g. htons(3490) struct in_addr sin_addr; // see struct in_addr, below char sin_zero[8]; // zero this if you want to }; struct in_addr { unsigned long s_addr; // load with inet_aton() };

Step 2 (Server) -­‐ Binding contd.

• addrlen

– size of the sockaddr_in

struct sockaddr_in saddr; int sockfd; unsigned short port = 80; if((sockfd=socket(AF_INET, SOCK_STREAM, 0) < 0) { // from back a couple slides printf(“Error creating socket\n”); ... } *memset(&saddr, '\0', sizeof(saddr)); // zero structure out saddr.sin_family = AF_INET; // match the socket() call saddr.sin_addr.s_addr = htonl(INADDR_ANY); // bind to any local address saddr.sin_port = htons(port); // specify port to listen on if((bind(sockfd, (struct sockaddr ) &saddr, sizeof(saddr)) < 0) { // bind! printf(“Error binding\n”); ... }

What is htonl(), htons()?

• Byte ordering

– Network order is big-­‐endian

– Host order can be big-­‐ or lidle-­‐endian

  • x86 is lidle-­‐endian
  • SPARC is big-­‐endian

• Conversion

– htons(), htonl() : host to network short/long

– ntohs(), ntohl() : network order to host short/long

• What need to be converted?

– Addresses

– Port

– etc.

Step 4 (Server) -­‐ Accept

• Server must explicitly accept incoming connec<ons

– int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)

• sockfd

– again... file descriptor socket() returned

• addr

– pointer to store client address, (struct sockaddr_in *) cast to

(struct sockaddr *)

• addrlen

– pointer to store the returned size of addr, should be sizeof

(*addr)

• For example

– int isock=accept(sockfd, (struct sockaddr_in *) &caddr, &clen);

Put Server Together

struct sockaddr_in saddr, caddr; int sockfd, clen, isock; unsigned short port = 80; if((sockfd=socket(AF_INET, SOCK_STREAM, 0) < 0) { // from back a couple slides printf(“Error creating socket\n”); ... } memset(&saddr, '\0', sizeof(saddr)); // zero structure out saddr.sin_family = AF_INET; // match the socket() call saddr.sin_addr.s_addr = htonl(INADDR_ANY); // bind to any local address saddr.sin_port = htons(port); // specify port to listen on if((bind(sockfd, (struct sockaddr *) &saddr, sizeof(saddr)) < 0) { // bind! printf(“Error binding\n”); ... } if(listen(sockfd, 5) < 0) { // listen for incoming connections printf(“Error listening\n”); ... } *clen=sizeof(caddr) if((isock=accept(sockfd, (struct sockaddr ) &caddr, &clen)) < 0) { // accept one printf(“Error accepting\n”); ... }

Domain Name System (DNS)

• What if I want to send data to “www.slashdot.org”?

– DNS: Conceptually, DNS is a database collecCon of host entries

• hostname -­‐> IP address

– struct hostent *gethostbyname(const char *name);

• IP address -­‐> hostname

– struct hostent *gethostbyaddr(const char *addr, int len, int

type);

struct hostent { char *h_name; // official hostname char **h_aliases; // vector of alternative hostnames int h_addrtype; // address type, e.g. AF_INET int h_length; // length of address in bytes, e.g. 4 for IPv char **h_addr_list; // vector of addresses char *h_addr; // first host address, synonym for h_addr_list[0] };

Put Client Together

struct sockaddr_in saddr; struct hostent *h; int sockfd, connfd; unsigned short port = 80; if((sockfd=socket(AF_INET, SOCK_STREAM, 0) < 0) { // from back a couple slides printf(“Error creating socket\n”); ... } if((h=gethostbyname(“www.slashdot.org”)) == NULL) { // Lookup the hostname printf(“Unknown host\n”); ... } memset(&saddr, '\0', sizeof(saddr)); // zero structure out saddr.sin_family = AF_INET; // match the socket() call *memcpy((char ) &saddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length); // copy the address saddr.sin_port = htons(port); // specify port to connect to *if((connfd=connect(sockfd, (struct sockaddr ) &saddr, sizeof(saddr)) < 0) { // connect! printf(“Cannot connect\n”); ... }

TCP Framing

• TCP does NOT guarantee message boundaries

– IRC commands are terminated by a newline

– But you may not get one at the end of read(), e.g.

• One Send “Hello\n”

• MulCple Receives “He”, “llo\n”

– If you don’t get the enCre line from one read(),

use a buffer

Client /

Server

Session

Client Server

socket socket

bind

listen

read

read write

write

Connection

request

read

close

close

EOF

open_listenfd

connect accept

open_clientfd

Revisited