1 Sockets Programming in Linux References: Internetworking with TCP/IP Vol III - Linux version UNIX Network Programming - W. Richard Stevens.

Slides:



Advertisements
Similar presentations
Network Programming Week #1 J.P. Yoo
Advertisements

Introduction to Sockets Jan Why do we need sockets? Provides an abstraction for interprocess communication.
Socket Programming Application Programming Interface.
Elementary TCP Sockets Computer Networks Computer Networks Term B10 UNIX Network Programming Vol. 1, Second Ed. Stevens Chapter 4.
Socket Programming: a Primer Socket to me!. Feb. 23, 2001EE122, UCB2 Why does one need sockets? application network protocol sockets network.
Programming with Berkeley Sockets Presented by Chris GauthierDickey Written by Daniel Stutzbach (I think!) for CIS 432/532 Useful References: ● man pages.
CS 311 – Lecture 18 Outline IPC via Sockets – Server side socket() bind() accept() listen() – Client side connect() Lecture 181CS Operating Systems.
Socket Addresses. Domains Internet domains –familiar with these Unix domains –for processes communicating on the same hosts –not sure of widespread use.
CSTP FS97CS490D (cotter)1 Sockets Programming in UNIX References: Internetworking with TCP/IP Vol III - BSD version UNIX Network Programming - W. Richard.
1 Tutorial on Socket Programming Computer Networks - CSC 458 Department of Computer Science Yukun Zhu (Slides are mainly from Monia Ghobadi, and Amin Tootoonchian,
Client Software Design Objectives: Understand principles of C/S design, with focus on clients Review Windows implementations of Socket functions.
Cs423-cotter1 Example Client Program Reference Comer & Stevens, Chapter 7.
Tutorial on Socket Programming Data types and structures for writing client- server programs.
CS1652 September 13th, 2012 The slides are adapted from the publisher’s material All material copyright J.F Kurose and K.W. Ross, All Rights.
ECE 4110 – Internetwork Programming Client-Server Model.
Sockets and intro to IO multiplexing. Goals We are going to study sockets programming as means to introduce IO multiplexing problem. We will revisit socket.
Fall 2000Datacom 11 Socket Programming Review Examples: Client and Server-Diagnostics UDP versus TCP Echo.
IT1352-NETWORK PROGRAMMING AND MANAGEMENT
Sirak Kaewjamnong Computer Network Systems
Server Sockets: A server socket listens on a given port Many different clients may be connecting to that port Ideally, you would like a separate file descriptor.
The Application Layer Application Services (Telnet, FTP, , WWW) Reliable Stream Transport (TCP) Connectionless Packet Delivery Service (IP) Unreliable.
 Wind River Systems, Inc Chapter - 13 Network Programming.
Windows Operating System Internals - by David A. Solomon and Mark E. Russinovich with Andreas Polze Unit OS A: Windows Networking A.2. Windows Sockets.
1 Example Servers Pt 1 Objective: To discuss key aspects of various server implementations.
Socket Programming Lec 2 Rishi Kant. Review of Socket programming Decide which type of socket – stream or datagram. Based on type create socket using.
CS 158A1 1.4 Implementing Network Software Phenomenal success of the Internet: – Computer # connected doubled every year since 1981, now approaching 200.
The Sockets Library and Concepts Rudra Dutta CSC Spring 2007, Section 001.
Cli/Serv.: sockets 3/91 Client/Server Distributed Systems v Objectives –describe iterative clients and servers using the UDP protocol ,
Example Servers Pt 2 Objective: To discuss key aspects of various server implementations.
Elementary TCP Sockets UNIX Network Programming Vol. 1, Second Ed. Stevens Chapter 4.
Introduction to Socket
Chapter 27 Socket API Interface The interface between an application program and the communication protocols in an operating system is known as the Application.
Socket Programming Tutorial Department of Computer Science Southern Illinois University Edwardsville Fall, 2015 Dr. Hiroshi Fujinoki
Socket Programming Lab 1 1CS Computer Networks.
Cs423-cotter1 Concurrency Issues in Client/Server Applications Chapters 15,16, 28.
Sockets Socket = abstraction of the port concept: –Application programs request that the operating system create a socket when one is needed –O.S. returns.
Chapter 2 Applications and Layered Architectures Sockets.
C Programming in Linux Sockets. All Internet Applications use Sockets to Communicate Servers use passive sockets to listen Clients use active sockets.
Single Process, Concurrent, Connection-Oriented Servers (TCP) (Chapter 12)
CSCI 330 UNIX and Network Programming Unit XV: Transmission Control Protocol.
Network Programming By J. H. Wang Nov. 21, Outline Introduction to network programming Socket programming –BSD Socket –WinSock –Java Socket Exercises.
S OCKET P ROGRAMMING IN C Professor: Dr. Shu-Ching Chen TA: HsinYu Ha.
S OCKET P ROGRAMMING IN C Professor: Dr. Shu-Ching Chen TA: Hsin-Yu Ha.
Berkeley Socket Abstraction
Read() recv() connection establishment Server (connection-oriented protocol) blocks until connection from client Client socket() bind() listen() accept()
CSCI 330 UNIX and Network Programming Unit XIV: User Datagram Protocol.
UNIX Sockets Outline UNIX sockets CS 640.
1 Dimension of Server Designs r Iterative vs Concurrent r Connection-oriented vs. connectionless r Stateful and stateless m Constrained by application.
Client-Server Programming and Applications. References Douglas Comer, David Stevens, “Internetworking with TCP/IP: Client-Server Programming and Applications”,
Lecture 15 Socket Programming CPE 401 / 601 Computer Network Systems slides are modified from Dave Hollinger.
Lecture 3 TCP and UDP Sockets CPE 401 / 601 Computer Network Systems slides are modified from Dave Hollinger.
Socket Programming in C CS587x Lecture 3 Department of Computer Science Iowa State University.
1 Socket Interface. 2 Client-Server Architecture The client is the one who speaks first Typical client-server situations  Client and server on the same.
Socket Programming(1/2). Outline  1. Introduction to Network Programming  2. Network Architecture – Client/Server Model  3. TCP Socket Programming.
1 Socket Interface. 2 Basic Sockets API Review Socket Library TCPUDP IP EthernetPPP ARP DHCP, Mail, WWW, TELNET, FTP... Network cardCom Layer 4 / Transport.
1 Vehicle Networking Networks Instruction 1 – Echo client/server in C Jeroen Voeten ES, 2012.
Sockets and Beginning Network Programming
CS 1652 Jack Lange University of Pittsburgh
Socket Programming in C
Internet and Intranet Protocols and Applications
Socket Programming in C
TCP Sockets Programming
TCP/IP Socket Programming in C
Chapter 06. UDP Server/Client.
Socket Programming(1/2)
Sockets Programming Socket to me!.
Sockets Programming Socket to me!.
Chapter 04. TCP Server/Client.
Socket Programming Neil Tang 09/08/2008
Presentation transcript:

1 Sockets Programming in Linux References: Internetworking with TCP/IP Vol III - Linux version UNIX Network Programming - W. Richard Stevens

2 Sockets Programming in Linux Linux / UNIX Socket API functions Example TCP / UDP Clients Example TCP / UDP Servers

3 Basic Socket Functions Server(Linux / UNIX) Create a socket of a particular type –retcode = socket (family, type, protocol ) –s = socket (PF_INET, SOCK_STREAM, 0); –returns socket number or -1 on error Bind that socket to a specific port –retcode = bind (socket, localaddr, addrlen ) –n = bind (s, (struct sockaddr *)myaddr, sizeof(myaddr)); –returns 0 on success, -1 on fail

4 Basic Socket Functions Server(Linux / UNIX) Wait for an incoming message –retcode = listen (socket, queuelen) –ans = listen(s, 0); /* queuelen max ~ 5*/ –return value 0 = success, -1 = fail Create a new socket and return new socket ID to client –retcode = accept (socket, addr, addrlen) –ans = accept (s, (struct sockaddr *)cl_addr, sizeof(cl_addr)); –return value socket number = success, -1 = fail

5 Basic Socket Functions Server (Linux / UNIX) Read / send a message –retcode = read [write] (socket, buff, bufflen) –ans = read (s, buf, sizeof(buf)); –ans = write (s, buf, strlen(buf)); –return value word count = success, -1 = fail –retcode = recv [send] (socket, buff, bufflen, 0) –ans = recv (s, buf, sizeof(buf), 0); –ans = send (s, buf, strlen(buf), 0); –return value word count = success, -1 = fail Close the socket –retcode = shutdown (socket, direction) direction: 0 means input, 1 means output, 2 means both –retcode = close (socket ); –return value 0 = success, -1 = fail

6 Basic Socket Functions Client (Linux / UNIX) Create a socket of a particular type –Socket ( ) Establish a connection to a remote Port/Socket –retcode = connect (socket, addr, addrlen) –ans = connect (s, (struct sockaddr *)&svr, sizeof(svr)) –return value 0 = success, -1 = fail Send and receive messages to/from remote socket –Read( ) / Write( ) of recv( ) / send( Close the socket –Close ( )

7 Additional Socket Functions (Linux / UNIX) Byte ordering functions –servaddr.sin_port = htons (SERV_PORT) –myaddr.sin_addr.s_addr = htonl (INADDR_ANY) Name resolution functions –host / protocol / service, by name / address / port Other Stuff –zero out memory blocks bzero ((char *)&myaddr, sizeof(myaddr)); –copy memory blocks bcopy (hp->h_addr, (caddr_T)&svaddr.sin_addr, hp->h_length)

8 Example Linux Client Develop a set of procedures that can be used by other programs to implement client / server. int connectTCP (host, service) int connectsock(host, service, “tcp”) [identify service, host, port] [get a socket] [connect to service / host / port] [return socket number]

9 Linux Client - Connectsock.c intconnectTCP (char *host, char *service) { return connectsock (host, service, “tcp”); }

10 Linux Client - Connectsock.c #include,,, int connectsock (char *host, char *service, char *protocol) { struct hostent*phe; struct servent*pse; struct protoent*ppe; struct sockaddr_in sin; int s, type;

11 Linux Client - Connectsock.c bzero ((char *)&sin, sizeof (sin)); sin.sin_family = AF_INET; if (pse = getservbyname (service, protocol) ) sin.sin_port = pse ->s_port; else if ( (sin.sin_port = htons((u_short)atoi(service))) == 0) error_exit (“can’t get %s service\n”, service); if (phe = gethostbyname (host) ) bcopy(phe->h_addr, (char *)&sin.sin_addr, phe->h_length); else if ((sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE) error_exit (“can’t get %s host\n”, host);

12 Linux Client - Connectsock.c if ( (ppe = getprotobyname (protocol) == 0) error_exit (“can’t get %s host\n”, host); if (strcmp (protocol, “tcp”) == 0) type = SOCK_STREAM; else type = SOCK_DGRAM; if (s = socket (PF_INET, type, ppe->p_proto)) < 0) error_exit (“Can’t create a socket\n”); if (connect (s, (struct sockaddr *)&sin, sizeof(sin)) < 0) error_exit (“can’t connect to remote socket\n”); return s; }

13 Example Linux Client - TCPecho.c #include #define LINELEN128 int main (argc, argv) { host = argv[1]; service = argv[2]; TCPecho (host, service); exit (0); }

14 Example Linux Client - TCPecho.c int TCPecho (char *host, char *service) { charbuf[LINELEN+1]; ints, n, outchars, inchars; s = connectTCP (host, service); while (fgets (buf, sizeof(buf), stdin)) { buf[LINELEN] = ‘\0’; outchars = strlen(buf); (void) write (s, buf, outchars);

15 Example Linux Client - TCPecho.c for (inchars = 0; inchars < outchars; inchars +=n) { n = read (s, &buf[inchars], outchars - inchars); if (n < 0) error_exit(“socket read failed\n”); } fputs (buf, stdout); }

16 TCP Client Algorithm Issues Client / Server Communications –request / response interaction –write / read (send / recv) Single write may require multiple reads –response may be segmented –continue appending reads until return length = 0

17 Example Linux Client - UDPecho.c #include #define LINELEN128 int main (argc, argv) { host = argv[1]; service = argv[2]; UDPecho (host, service); exit (0); }

18 Example Linux Client - UDPecho.c int UDPecho (char *host, char *service) { charbuf[LINELEN+1]; ints, n, outchars, inchars; s = connectUDP (host, service); while (fgets (buf, sizeof(buf), stdin)) { buf[LINELEN] = ‘\0’; outchars = strlen(buf); (void) write (s, buf, outchars);

19 Example Linux Client - UDPecho.c if (read (s, buf, nchars) < 0) error_exit (“Socket read failed \n”); fputs (buf, stdout); }

20 Iterative Connectionless Server TIME Server /* UDPtimed.c - main */ #include extern interrno; intpassiveUDP(const char *service); interrexit(const char *format,...); #define UNIXEPOCH /* UNIX epoch, in secs*/

21 Iterative Connectionless Server TIME Server int main(int argc, char *argv[]) { struct sockaddr_in fsin; /* the address of a client */ char* service = "time"; /* service name or port number */ char buf[1];/* "input" buffer; any size > 0 */ int sock;/* server socket*/ time_t now;/* current time*/ int alen;/* from-address length*/ switch (argc) { case1:break; case2:service = argv[1]; break; default:errexit("usage: UDPtimed [port]\n"); }

22 Iterative Connectionless Server TIME Server sock = passiveUDP(service); while (1) { alen = sizeof(fsin); if (recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr *)&fsin, &alen) < 0) errexit("recvfrom: %s\n", strerror(errno)); (void) time(&now); now = htonl((u_long)(now + UNIXEPOCH)); (void) sendto(sock, (char *)&now, sizeof(now), 0, (struct sockaddr *)&fsin, sizeof(fsin)); }

23 Concurrent Connection-Oriented TCPechod.c #include,,,,,, #define QLEN 10/* max connect queue length*/ #define BUFSIZE 4096 extern interrno; void *TCPechod(void *pfd); interrexit(const char *format,...); intpassiveTCP(const char *service, int qlen);

24 Concurrent Connection-Oriented TCPechod.c int main(int argc, char *argv[]) { char *service = "echo"; /* service name/port #*/ struct sockaddr_in fsin;/* address of client*/ unsigned intalen;/* len of client addr*/ intmsock;/* master server socket*/ intssock;/* slave server socket*/ pthread_t tid; switch (argc) { case1:break; case2:service = argv[1]; break; default: errexit("usage: TCPechod [port]\n"); }

25 Concurrent Connection-Oriented TCPechod.c msock = passiveTCP(service, QLEN); while (1) { alen = sizeof(fsin); ssock = accept (msock, (struct sockaddr *)&fsin, &alen); if (ssock < 0) { errexit("accept: %s\n", strerror(errno)); } //Now create a thread to handle client request pthread_create (&tid, NULL, &TCPechod, (void *)&ssock); } //end of while }//end of main

26 Concurrent Connection-Oriented TCPechod.c msock = passiveTCP(service, QLEN); while (1) { alen = sizeof(fsin); ssock = accept(msock, (struct sockaddr *)&fsin, &alen); if (ssock < 0) { errexit("accept: %s\n", strerror(errno)); } //Now create a thread to handle client request pthread_create (&tid, NULL, &TCPechod, (void *)&ssock); } //end of while }//end of main

27 Concurrent Connection-Oriented TCPechod.c void * TCPechod(void * pfd) { charbuf[BUFSIZE]; intcc, fd; fd = * (int *) pfd; while (cc = recv(fd, buf, sizeof (buf), 0)) { if (cc < 0) errexit("echo read: %s\n", strerror(errno)); printf ("We got: %s\n", buf); if (send(fd, buf, cc, 0) < 0) errexit("echo write: %s\n", strerror(errno)); bzero (&buf, sizeof(buf)); }

28 Summary Sockets API almost identical in Windows and Linux –Linux does not use WSAStartup, WSACleanup –Linux uses close(socket), Windows uses closesocket() Some differences in Operating System functions –Multiple threads Windows - _beginthread (…) Linux – pthread_create (…) –Multiple Processes Windows – CreateProcess(…) Linux – Fork()