Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS4514 (C04) HELP Session 1 Introduction to Network Programming (v1.4)

Similar presentations


Presentation on theme: "CS4514 (C04) HELP Session 1 Introduction to Network Programming (v1.4)"— 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 Project Turnin
Client Server Communication with netoracle Project Turnin How to find help Additional suggestions / tips 1/14/2019 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. 1/14/2019 WPI

4 Project 1 Communication Model
Client Server (3) Connect to the service TCP UDP UDP (2) List services (1) Register the service netoracle DNS 1/14/2019 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. 1/14/2019 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() 1/14/2019 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; /* file descriptor 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); } 1/14/2019 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); 1/14/2019 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); 1/14/2019 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() 1/14/2019 WPI

11 Example: TCP Client int sd; /* file descriptor 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); } 1/14/2019 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); 1/14/2019 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 ); 1/14/2019 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() 1/14/2019 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); 1/14/2019 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); 1/14/2019 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 */ }; 1/14/2019 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 */ }; 1/14/2019 WPI

19 Oracle Commands (om struct)
Clear a service: serv.ver = verCur; serv.cmd = cmdClr; serv.uid = ?; serv.sbServ = ?; Find a service: serv.ver = verCur; serv.cmd = cmdGet; serv.uid = ?; serv.sbServ = ?; Register a service: serv.cmd = cmdPut; serv.sbDesc = ?; serv.sa = ? 1/14/2019 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); } 1/14/2019 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 1/14/2019 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” 1/14/2019 WPI

23 HELP Bring printouts to office hours.
TA’s with questions. You CAN 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. 1/14/2019 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) 1/14/2019 WPI

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

26 Other resources > man sendto
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 Programming 1/14/2019 WPI

27 UNIX Debugging 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 1/14/2019 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. 1/14/2019 WPI


Download ppt "CS4514 (C04) HELP Session 1 Introduction to Network Programming (v1.4)"

Similar presentations


Ads by Google