CS4514 (C04) HELP Session 1 - PowerPoint PPT Presentation

About This Presentation
Title:

CS4514 (C04) HELP Session 1

Description:

CS4514 (C04) HELP Session 1 Introduction to Network Programming (v1.4) Speaker: Chunling Ma HL116, Oct 28th of 2004 – PowerPoint PPT presentation

Number of Views:28
Avg rating:3.0/5.0
Slides: 29
Provided by: Chunl2
Learn more at: http://web.cs.wpi.edu
Category:

less

Transcript and Presenter's Notes

Title: CS4514 (C04) HELP Session 1


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

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.

4
Project 1 Communication Model
(3) Connect to the service
TCP
UDP
UDP
(2) List services
(1) Register the service
5
Project 1 missions (in handout)
  • Client
  • Wait on users 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.

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()
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)) lt 0 ) perror(strerror(errno)) exit(-1)

8
Example UDP Client (Continued)
/ prepare socket address of server
/ bzero((char)server, sizeof(server)) server.s
in_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-gth_addr, (char)server.sin_addr,
hp-gth_length)
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)
10
TCP Connection (Client)
socket()
  • Stevens (Page 86)
  • Connection Oriented
  • Specify transport address once at connection
  • Use File Operations on socket descriptor
  • read(sd, ) / write(sd, )
  • Reliable Protocol

connect()
read() / write() send() / recv()
close()
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)) lt 0) perror(strerror(errno))
exit(-1)
12
Example TCP Client (Continued)
/ prepare server socket address (same as udp)
/ bzero((char)server, sizeof(server)) server.s
in_family AF_INET server.sin_port
htons(SERVER_PORT) if ( (hp gethostbyname(SERVE
R_NAME)) NULL) perror(strerror(errno)) exi
t(-1) bcopy(hp-gth_addr, (char)server.sin_addr
, hp-gth_length)
13
Example TCP Client (Continued)
/ connect to the server / if (connect(sd,
(struct sockaddr) server, sizeof(server)) lt 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 )
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()
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) serv
er.sin_addr.s_addr htonl(INADDR_ANY)
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)
17
Oracle om Structure
  • struct om / oracle message /
  • char ver / version
    number of this structure /
  • enum cmd cmd / command/reply
    code /
  • char sbDesccchMaxDesc / description of
    service /
  • char uidluid / user id of
    requester/provider /
  • char sbServcchMaxServ / name of service /
  • struct sockaddr_in sa / socket addr where
    service is at /
  • unsigned long ti / time of
    registration /

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 /

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.ver verCur
  • serv.cmd cmdPut
  • serv.uid ?
  • serv.sbServ ?
  • serv.sbDesc ?
  • serv.sa ?

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)

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

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 dont 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

23
HELP
  • Bring printouts to office hours.
  • Email TAs (cs4514-ta_at_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.

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)

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

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

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

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.
Write a Comment
User Comments (0)
About PowerShow.com