Cs423-cotter1 Example Client Program Reference Comer & Stevens, Chapter 7.

Slides:



Advertisements
Similar presentations
Socket Programming Application Programming Interface.
Advertisements

Elementary TCP Sockets Computer Networks Computer Networks Term B10 UNIX Network Programming Vol. 1, Second Ed. Stevens Chapter 4.
Networks: TCP/IP Socket Calls1 Elementary TCP Sockets Chapter 4 UNIX Network Programming Vol. 1, Second Ed. Stevens.
Elementary TCP Sockets Chapter 4 UNIX Network Programming Vol. 1, Second Ed. Stevens.
Client Design. Issues Server Identification Setting up a socket on client side TCP –Reading and writing with a socket –Closing a socket UDP –Reading and.
Socket Addresses. Domains Internet domains –familiar with these Unix domains –for processes communicating on the same hosts –not sure of widespread use.
Client Server Model The client machine (or the client process) makes the request for some resource or service, and the server machine (the server process)
SOCKETS Lecture #3. The Socket Interface Funded by ARPA (Advanced Research Projects Agency) in Developed at UC Berkeley Objective: to transport.
ISP – 9 th Recitation Socket programming – Client side.
1 Socket Programming A crash-course in network programming…
CSTP FS97CS490D (cotter)1 Sockets Programming in UNIX References: Internetworking with TCP/IP Vol III - BSD version UNIX Network Programming - W. Richard.
Client Software Design Objectives: Understand principles of C/S design, with focus on clients Review Windows implementations of Socket functions.
1 Sockets Programming in Linux References: Internetworking with TCP/IP Vol III - Linux version UNIX Network Programming - W. Richard Stevens.
Tutorial on Socket Programming Data types and structures for writing client- server programs.
Socket programming in C. Socket programming Socket API introduced in BSD4.1 UNIX, 1981 explicitly created, used, released by apps client/server paradigm.
Socket Programming References: redKlyde ’ s tutorial set Winsock2 for games (gamedev.net)
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.
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.
Communication. References Chapter 3, Tanenbaum and Van Steen Beej’s Network Programming Guide.
Assignment 3 A Client/Server Application: Chatroom.
Network Programming Tutorial #9 CPSC 261. A socket is one end of a virtual communication channel Provides network connectivity to any other socket anywhere.
Sirak Kaewjamnong Computer Network Systems
CS252: Systems Programming Ninghui Li Based on slides by Prof. Gustavo Rodriguez-Rivera Topic 17: Project 5.
Lab #1: Network Programming using Sockets By J. H. Wang Nov. 28, 2011.
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.
Networking Tutorial Special Interest Group for Software Engineering Luke Rajlich.
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.
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.
Socket Programming Introduction. Socket Definition A network socket is one endpoint in a two-way communication flow between two programs running over.
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.
University of Texas at Austin CS 378 – Game Technology Don Fussell CS 378: Computer Game Technology SDL_net Client-Server Example Spring 2012.
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.
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.
实验讲解 1 、套接字的使用实例. D.E.Comer,D.L.Stevens, TCP/IP 网络互连技术 卷 III: 客户服务器编程和应用 Windows 套接字版 清华大学出版社 清华大学出版社 ServerClient Time.
The Socket Interface A Networking Application Program Interface.
Socket programming in C. Socket programming with TCP Client must contact server server process must first be running server must have created socket (door)
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
Part 2 Socket Programming UDP.
CS 1652 Jack Lange University of Pittsburgh
Socket Programming in C
CHAPTER 8 ELEMENTARY UDP SOCKETS
Recitation 11 – 4/29/01 Outline Sockets Interface
UNIX Domain sockets The Linux Programming Interface (ch 57)
Internet and Intranet Protocols and Applications
Berkeley API Socket Programming
Berkeley API Socket Programming
Chapter 06. UDP Server/Client.
Socket Programming(1/2)
Chapter 04. TCP Server/Client.
Socket Programming Neil Tang 09/08/2008
Berkeley API Socket Programming
Presentation transcript:

cs423-cotter1 Example Client Program Reference Comer & Stevens, Chapter 7

cs423-cotter2 Example Windows Client Develop a set of procedures that can be used by other programs to implement client / server. int connectUDP (host, service) int connectsock(host, service, “udp”) [identify service, host, port] [get a socket] [connect to service / host / port] [return socket number]

cs423-cotter3 Example Windows Client connectTCP.c #include SOCKET connectTCP (char *host, char *service) { return connectsock (host, service, “tcp”); } SOCKET connectUDP (char *host, char *service) { return connectsock (host, service, “udp”); }

cs423-cotter4 Example Windows Client connectsock.c #include,,, SOCKET connectsock (char *host, char *service, char *transport) { struct hostent*phe; struct servent*pse; struct protoent*ppe; struct sockaddr_in sin; int s, type;

cs423-cotter5 Example Windows Client connectsock.c memset(&sin, 0, sizeof (sin)); sin.sin_family = AF_INET; if (pse = getservbyname (service, transport) ) sin.sin_port = pse ->s_port; else if ( (sin.sin_port = htons((u_short)atoi(service))) == 0) errexit (“can’t get %s service\n”, service); if (phe = gethostbyname (host) ) memcpy(&sin.sin_addr, phe->h_addr, phe->h_length); else if ((sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE ) errexit (“can’t get %s host\n”, host);

cs423-cotter6 Example Windows Client connectsock.c if ( (ppe = getprotobyname (transport) == 0) errexit (“can’t get %s protocol entry\n”,transport); if (strcmp (transport, “tcp”) == 0) type = SOCK_STREAM; else type = SOCK_DGRAM; if( (s = socket (PF_INET, type, ppe->p_proto)) == INVALID_SOCKET) errexit (“Can’t create a socket: %d\n”, GetLastError()); if (connect (s, (struct sockaddr *)&sin, sizeof(sin)) == SOCKET_ERROR) errexit (“can’t connect to remote socket\n”); return s; }

cs423-cotter7 Example client program Echo client (connection-oriented) Establish a connection to server while (user enters text) send text to server receive text back from server display received message on screen close connection & exit

cs423-cotter8 tcpecho ( ) #include,,, voidTCPecho(const char *, const char *); voiderrexit(const char *,...); SOCKETconnectTCP(const char *, const char *); #defineLINELEN 128 #defineWSVERSMAKEWORD(2, 0) void main(int argc, char *argv[]) { char*host = "localhost";/* host to use if none supplied */ char*service = "echo";/* default service name */ : WSADATAwsadata; if (WSAStartup(WSVERS, &wsadata) != 0) errexit("WSAStartup failed\n"); TCPecho(host, service); WSACleanup(); exit(0); }

9 tcpecho ( ) – argument Switch #include,,, voidTCPecho(), errexit(), connectTCP(); #defineLINELEN 128, WSVERSMAKEWORD(2, 0) void main(int argc, char *argv[]) { char*host = "localhost";/* host to use if none supplied */ char*service = "echo";/* default service name */ switch (argc) { case 1:break; case 3: service = argv[2]; //Fall Through!! case 2: host = argv[1]; break; default; printf (“Usage: %s [host[port]]\n”, argv[0]); exit(1); } WSADATAwsadata; if (WSAStartup(WSVERS, &wsadata) != 0) errexit("WSAStartup failed\n"); TCPecho(host, service); WSACleanup(); exit(0);

cs423-cotter10 tcpecho (cont) void TCPecho(const char *host, const char *service) { charbuf[LINELEN+1];/* buffer for one line of text */ SOCKETs;/* socket descriptor */ intcc, outchars, inchars;/* characters counts */ s = connectTCP(host, service); while (fgets(buf, sizeof(buf), stdin)) { buf[LINELEN] = '\0'; /* ensure line null-termination */ outchars = strlen(buf); (void) send(s, buf, outchars, 0); for (inchars = 0; inchars < outchars; inchars += cc) { cc = recv(s, &buf[inchars], outchars-inchars, 0); if (cc == SOCKET_ERROR) errexit("socket recv failed: %d\n", GetLastError()); }fputs(buf, stdout); }closesocket(s); }

cs423-cotter11 UDPecho.cpp #include,,, voidUDPecho(const char *, const char *); voiderrexit(const char *,...); SOCKETconnectUDP(const char *, const char *); #defineLINELEN128 #defineWSVERSMAKEWORD(2, 0) void main(int argc, char *argv[]) { char*host = "localhost", *service = "echo"; WSADATAwsadata; if (WSAStartup(WSVERS, &wsadata)) errexit("WSAStartup failed\n"); UDPecho(host, service); WSACleanup(); exit(0); }

cs423-cotter12 UDPecho.cpp void UDPecho(const char *host, const char *service) { charbuf[LINELEN+1];/* buffer for one line of text*/ SOCKETs;/* socket descriptor */ intnchars;/* read count*/ s = connectUDP(host, service); while (fgets(buf, sizeof(buf), stdin)) { buf[LINELEN] = '\0';/* ensure null-terminated */ nchars = strlen(buf); (void) send(s, buf, nchars, 0); if (recv(s, buf, nchars, 0) < 0) errexit("recv failed: error %d\n", GetLastError()); fputs(buf, stdout); }

cs423-cotter13 UDPecho_cnls.cpp #include,,, ….. // function prototypes, defines, etc. void main(int argc, char *argv[]) { char*host = "localhost", *service = "echo"; WSADATAwsadata; switch (argc) {… } // test for command line params if (WSAStartup(WSVERS, &wsadata)) errexit("WSAStartup failed\n"); UDPecho_cnls(host, service); WSACleanup(); exit(0); }

cs423-cotter14 UDPecho_cnls.cpp (cont) void UDPecho_cnls(const char *host, const char *service) { charbuf[LINELEN+1];/*buffer for text */ SOCKETs; /* socket descriptor */ intnchars; /* read count*/ struct hostent*phe; /* * host info entry*/ struct servent*pse;/* * service info entry */ struct protoent *ppe;/* * protocol info entry */ struct sockaddr_in sin; /* Internet endpoint addr*/ inttype, status; /* socket descriptor & type*/ char *transport = "udp";/*Transport service name*/

cs423-cotter15 UDPecho_cnls.cpp (cont) memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; /* Map service name to port number */ if ( pse = getservbyname(service, transport) ) sin.sin_port = pse->s_port; else if ( (sin.sin_port = htons((u_short)atoi(service)))== 0) errexit("can't get \"%s\" service entry\n", service); /*Map host name to IP address, dotted decimal(?)*/ if ( phe = gethostbyname(host) ) memcpy(&sin.sin_addr,phe->h_addr,phe->h_length);

cs423-cotter16 UDPecho_cnls.cpp (cont) else if( (sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE) errexit("can't get \"%s\" host entry\n", host); printf("Server at %s\n",inet_ntoa(sin.sin_addr)); /* Map protocol name to protocol number */ if ( (ppe = getprotobyname(transport)) == 0) errexit("Can't get \"%s\" entry\n", transport); /* Use protocol to choose a socket type */ if (strcmp(transport, "udp") == 0) type = SOCK_DGRAM; else type = SOCK_STREAM;

cs423-cotter17 UDPecho_cnls.cpp (cont) /* Allocate a socket */ s = socket(PF_INET, type, ppe->p_proto); if (s == INVALID_SOCKET) errexit("Socket error: %d\n", GetLastError()); printf("Enter data to send...\n"); while (fgets(buf, sizeof(buf), stdin)) { buf[LINELEN] = '\0';/* ensure null-terminated */ nchars = strlen(buf); status = sendto(s, buf, nchars, 0, (struct sockaddr FAR *)&sin,sizeof(sin)); if (status == SOCKET_ERROR) errexit("Sendto failed: %d\n", GetLastError());

cs423-cotter18 UDPecho_cnls.cpp (cont) printf ("We just sent a datagram\n"); if (recvfrom(s,buf,LINELEN,0,NULL,NULL) < 0) errexit("recv failed: %d\n",GetLastError()); printf("We got back %d characters: ", nchars); fputs(buf, stdout); } /* end of while */ }/* end of UDPecho () */

cs423-cotter19 UDPecho_cnls.cpp – v2 #include using namespace std; voidUDPecho(const char *, const char *); #defineLINELEN128 #defineWSVERSMAKEWORD(2, 0) #define ARGSIZE 25 int main(int argc, char *argv[]) { charhost[ARGSIZE] = "localhost"; charservice[ARGSIZE] = "12345"; WSADATAwsadata;

cs423-cotter20 UDPecho_cnls.cpp – v2 switch (argc) { case 1: break; case 3: if (strlen(argv[2]) < ARGSIZE-1) strcpy_s (service,strlen(argv[2])+1,argv[2]); else { cout << "Service name too long!!" << endl; exit (1); } /* FALL THROUGH */ case 2: if (strlen(argv[1]) < ARGSIZE-1) strcpy_s (host,strlen(argv[1])+1,argv[1]); else { cout << "Service name too long!!" << endl; exit (1); } break;

cs423-cotter21 UDPecho_cnls.cpp – v2 default: cout << "Usage: UDPecho [host [port]]\n" << endl; exit(1); } if (WSAStartup(WSVERS, &wsadata)) { cout << "WSAStartup failed" << endl; exit(1); } UDPecho(host, service); WSACleanup(); return 0; }

cs423-cotter22 UDPecho_cnls.cpp – v2 void UDPecho(const char *host, const char *service) { charbuf[LINELEN+1];/* buffer for one line of text */ SOCKETs;/* socket descriptor */ intnchars;/* read count*/ struct hostent*phe;/* pointer to host information entry*/ struct servent*pse;/* pointer to service information entry */ struct protoent *ppe;/* pointer to protocol information entry */ struct sockaddr_in sin; /* an Internet endpoint address */ inttype, status; /* socket descriptor and socket type */ char *transport = "udp"; /* transport service name for port*/ memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET;

cs423-cotter23 UDPecho_cnls.cpp – v2 /* Map service name to port number */ if ( pse = getservbyname(service, transport) ) sin.sin_port = pse->s_port; else if ( (sin.sin_port = htons((u_short)atoi(service)))== 0) { cout << "Can't get \"" << service << "\" service entry" << endl; exit(1); } /* Map host name to IP address, allowing for dotted decimal */ if ( phe = gethostbyname(host) ) memcpy(&sin.sin_addr, phe->h_addr, phe->h_length); else if ( (sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE) { cout << "Can't get \"" << host << "\" IP address "<< endl; exit(1); }

cs423-cotter24 UDPecho_cnls.cpp – v2 cout <<"Our target server is at address " << inet_ntoa(sin.sin_addr) << endl; /* Map protocol name to protocol number */ if ( (ppe = getprotobyname(transport)) == 0) { cout << "Can't get \"" << transport << "\" protocol entry "<< endl; exit(1); } /* Socket type is UDP*/ type = SOCK_DGRAM; /* Allocate a socket */ s = socket(PF_INET, type, ppe->p_proto); if (s == INVALID_SOCKET) { cout << "Can't create socket" << endl; exit(1); }

cs423-cotter25 UDPecho_cnls.cpp – v2 /* begin the data input / output loop... */ cout << "Enter data to send..." << endl; while (cin.getline(buf,LINELEN)) { buf[LINELEN] = '\0';/* ensure null-terminated */ nchars = strlen(buf); status = sendto(s, buf, nchars, 0, (struct sockaddr FAR *)&sin, sizeof(sin)); if (status == SOCKET_ERROR) { cout << "Sendto failed...: error " << GetLastError() << endl; exit(1); } cout << "We just sent a datagram" << endl;

cs423-cotter26 UDPecho_cnls.cpp – v2 if (recvfrom(s, buf, LINELEN, 0, NULL, NULL) < 0) { cout << "recv failed: error" << GetLastError() << endl; exit(1); } if (strncmp(buf, "_quit", 5) == 0) { cout << "Goodbye......" << endl; break; } cout << "We got back the following " << nchars << " characters: " << endl; cout << buf << endl; } /* end of while */ }/* end of UDPecho () */

cs423-cotter27 Sample Output C: \udpecho_cnls\Debug>udpecho_cnls lab222c Our target server is at address Enter data to send... This is my data We just sent a datagram We got back the following 16 characters: This is my data This is another message We just sent a datagram We got back the following 24 characters: This is another message ^Z C: \udpecho_cnls\Debug>