1 / 28

CS4514 (C04) HELP Session 1

CS4514 (C04) HELP Session 1. Introduction to Network Programming (v1.4) Speaker: Chunling Ma HL116, Oct 28th of 2004. Outline. Project 1 Overview Unix Network Programming Client Server Communication with netoracle Project Turnin How to find help

zeno
Download Presentation

CS4514 (C04) HELP Session 1

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. CS4514 (C04) HELP Session 1 Introduction to Network Programming (v1.4) Speaker: Chunling Ma HL116, Oct 28th of 2004

  2. Outline • Project 1 Overview • Unix Network Programming • Client • Server • Communication with netoracle • Project Turnin • How to find help • Additional suggestions / tips WPI

  3. CS4514 Project1 • Your programs should compile and work on ccc.wpi.edu computers, which are running Linux. • Netoracle is running on ccc3.wpi.edu only. • Programs should be written in C or C++ • If your program is developed on another platform or machine, you should test the software on ccc before turning in the assignment. • Make sure you have the correct #include in your program. • We have registered a couple of services in oracle that can be used to debug your client. WPI

  4. Client Server netoracle DNS Project 1 Communication Model (3) Connect to the service TCP UDP UDP (2) List services (1) Register the service WPI

  5. Project 1 missions (in handout) • Client: • Wait on user’s commands. • List all services registered on netoracle. • Connect to a service using the transport address returned from netoracle. • Server: • Register the service to netoracle. • Wait for connections and provide the service. WPI

  6. UDP Transmission (Client) • Stevens (Page 212) • Connectionless • Specify transport address every time you send/recv data • Unreliable Protocol • Data lost, bit errors • Stevens (Page 216) • Simple UDP echo client • Lenon page78 (robust) socket() sendto() recvfrom() close() WPI

  7. Example: UDP Client struct hostent *hp; /* /usr/include/netdb.h */ /* host info: host name, address, …*/ struct sockaddr_in server; /* /usr/include/netinet/in.h */ /* server socket address */ int sd; /* filedescriptor of socket */ size_t lserver = sizeof(server); /* prepare a socket: Internet address family, and datagram socket (for udp) */ if ( (sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) { perror(strerror(errno)); exit(-1); } WPI

  8. Example: UDP Client (Continued) /* prepare socket address of server*/ bzero((char*)&server, sizeof(server)); server.sin_family = AF_INET; /* endian convert: host to network */ server.sin_port = htons(SERVER_PORT); if ((hp = gethostbyname(SERVER_NAME)) == NULL) { perror(strerror(errno)); exit(-1); } /* copy server host address to server.sin_addr */ bcopy(hp->h_addr, (char*)&server.sin_addr, hp->h_length); WPI

  9. Example: UDP Client (Continued) /* prepare your message */ … /* send/receive data */ sendto(sd, sBuf, data_size, 0, (struct sockaddr*)&server, lserver); recvfrom(sd, rBuf, buff_size, 0, (struct sockaddr*)&server, &lserver); /* close socket */ close(sd); WPI

  10. TCP Connection (Client) • Stevens (Page 86) • Connection Oriented • Specify transport address once at connection • Use File Operations on socket descriptor • read(sd, …) / write(sd, …) • Reliable Protocol socket() connect() read() / write() send() / recv() close() WPI

  11. Example: TCP Client int sd; /* filedescriptor of socket */ struct hostent *hp; /* /usr/include/netdb.h */ /* host info: host name, address, …*/ struct sockaddr_in server; /* /usr/include/netinet/in.h */ /* server socket address */ size_t lserver = sizeof(server); /* prepare a socket: Internet address family, and byte stream socket (for tcp) */ if ((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror(strerror(errno)); exit(-1); } WPI

  12. Example: TCP Client (Continued) /* prepare server socket address (same as udp) */ bzero((char*)&server, sizeof(server)); server.sin_family = AF_INET; server.sin_port = htons(SERVER_PORT); if ( (hp = gethostbyname(SERVER_NAME)) == NULL) { perror(strerror(errno)); exit(-1); } bcopy(hp->h_addr, (char*)&server.sin_addr, hp->h_length); WPI

  13. Example: TCP Client (Continued) /* connect to the server */ if (connect(sd, (struct sockaddr*) &server, sizeof(server)) < 0) { perror(strerror(errno)); exit(-1); } /* send/receive data */ while (1) { read(sd, rBuf, buff_size)/write(sd, sBuf, data_size); } /* close socket and disconnect from the server*/ close( sd ); WPI

  14. TCP Connection (Server) socket() • Stevens (Page 86) • Bind transport address to socket • Listen to the socket • Accept connection on a new socket bind() listen() accept() read()/write() close() WPI

  15. Example: TCP Server int sd, nsd; /* nsd: file descriptor of new socket for accept */ struct sockaddr_in server; /* /usr/include/netinet/in.h */ /* prepare a socket, same as the one for tcp client */ sd = socket(AF_INET, SOCK_STREAM, 0); /* prepare your server socket address */ bzero((char*)&server, sizeof(server)); server.sin_family = AF_INET; /* Can use 0, then kernel assigns one at bind time */ server.sin_port = htons(YOUR_SERVER_PORT); server.sin_addr.s_addr = htonl(INADDR_ANY); WPI

  16. Example: TCP Server (Continued) /* bind socket descriptor to server socket address */ bind(sd, (struct sockaddr*) &server, sizeof(server)); /* listen to incoming connections */ listen(sd, num_of_conns); while (1) { /* accept a connection and copy to a new socket descriptor */ nsd = accept(sd, (struct sockaddr *) &client, sizeof(client)); read(nsd, rBuf, buff_size)/write(nsd, sBuf, data_size); close(nsd); } close(sd); WPI

  17. Oracle om Structure struct om { /* oracle message */ char ver; /* version number of this structure */ enum cmd cmd; /* command/reply code */ char sbDesc[cchMaxDesc]; /* description of service */ char uid[luid]; /* user id of requester/provider */ char sbServ[cchMaxServ]; /* name of service */ struct sockaddr_in sa; /* socket addr where service is at */ unsigned long ti; /* time of registration */ }; WPI

  18. Oracle Command Structure enum cmd { cmdErr, /* An error occurred. See sbDesc for details */ cmdGet, /* Get the address of a service */ cmdAckGet, /* ACK for cmdGet message */ cmdEnd, /* Last response to a cmdGet message */ cmdPut, /* Register a new service */ cmdAckPut, /* ACK for cmdPut message */ cmdClr, /* Unregister a service */ cmdAckClr /* ACK for cmdClr message */ }; WPI

  19. Find a service: serv.ver = verCur; serv.cmd = cmdGet; serv.uid = ?; serv.sbServ = ?; Register a service: serv.ver = verCur; serv.cmd = cmdPut; serv.uid = ?; serv.sbServ = ?; serv.sbDesc = ?; serv.sa = ? Clear a service: serv.ver = verCur; serv.cmd = cmdClr; serv.uid = ?; serv.sbServ = ?; Oracle Commands (om struct) WPI

  20. Oracle Communication Example(list services) int sd; struct sockaddr_in sa; // Can use gethostbyname() and // getservbyname() to get sa of oracle server size_t lsa = sizeof(sa); struct om sendMsg, recvMsg; size_t lom = sizeof(struct om); sendMsg.ver = verCur; sendMsg.cmd = cmdGet; sendto(sd, (void *)&sendMsg, lom, 0, (struct sockaddr *)&sa, lsa); while (1) { recvfrom(sd, (void *)&recvMsg, lom, 0, (struct sockaddr *)&sa, &lsa); } WPI

  21. Turnin Your Files • Turnin Command • Create a directory to hold your files:mkdir proj1 • Copy all files in the current directory to your new directory:cp * proj1 • Create a single, compressed archive file containing all of the files in your new directory:tar -czf proj1.tgz proj1 • Submit the archive file:/cs/bin/turnin submit cs4514 proj1 proj1.tgz WPI

  22. Turnin Your Files (Continued) • Files should include • All source code (including a Makefile) • A README file • Describes what portion of the project is implemented and what problems your programs have if there is any • gives your compile commands if you don’t offer a Makefile • Lists commands to run the programs • A result script showing the running results • Any custom header files that you used, including oracle.h if you have not used #include “/cs/cs4514/pub/lib/oracle.h” WPI

  23. HELP • Bring printouts to office hours. • Email TA’s (cs4514-ta@cs.wpi.edu) with questions. • You CAN email a specific TA, but do not expect immediate results, better to use the TA mailing list. • We do have a class mailing list that could be used as a last resort. WPI

  24. Some Useful System Calls • gethostbyname: map hostname to IP addr struct hostent *gethostbyname(char *name) • getservbyname: look up service name given struct servent *getservbyname(const char *servname, const char *protocol) • gethostname: get own hostname int gethostname(char *name, size_t len) • getsockname: map sd to socket addr int getsockname(int sd, struct sockaddr *sa, size_t *lsa) WPI

  25. bind listen accept select sendto/send recvfrom/recv gethostbyname getservbyname gethostname getsockname fork strlen, strtok UNIX Programming • Some functions that you may need: WPI

  26. Other resources • Use man pages for help on a particular command or function (Give the section number). > man sendto > man 2 bind //show bind(2) • Internet:Beej's Guide to Network Programminghttp://www.ecst.csuchico.edu/~beej/guide/net/ WPI

  27. GDB -- GNU Project Debugger Compile program with –g flag g++ -g –o program program.cc gcc –g –o program program.c gdb program {core} set args (command arguments) run, where, list, step, break continue inspect, help, quit Can examine specific data in program UNIX Debugging WPI

  28. UNIX Debugging (Continued) • There are many more options use “help” to learn more. • Also look at “man gdb”. • This will be useful to find out where a program crashes or seg faults. • You can set breakpoints to stop at specific line or function. • You can set specific data values in program. WPI

More Related