Network Programming By J. H. Wang Nov. 6, 2013. Outline Introduction to network programming Socket...

Post on 02-Jan-2016

225 views 2 download

transcript

Network Programming

By J. H. WangNov. 6, 2013

Outline

• Introduction to network programming• Socket programming

– BSD Socket– WinSock– Java Socket

• Exercises

Introduction

• Internet– TCP/IP protocol stack

• Client-server model– What do you need: client or server?

• Programming experience– C, C++, Java, …

• Tools needed– C/C++/Java Compiler– Packet sniffers

What’s a Socket

• Source IP, port• Destination IP, port• Protocol

– TCP– UDP

• Connection method– Connection-oriented: SOCK_STREAM– Connectionless: SOCK_DGRAM

Socket Programming

• UNIX BSD socket (in C)• Windows socket (in Dev-C++)• Java socket API• Perl, Python, …

Berkeley Socket

• General functions– open(), connect(), close(),

send(), recv(), …

• Functions for servers– bind(), listen(), accept()– select(), FD_SET, FD_CLR, FD_ISSET, …

An Example BSD Socket Program – a simple client (1/2)

• #include <sys/socket.h> #include <netinet/in.h> // for struct sockaddr_in#include <netdb.h> // for gethostbyname()

struct sockaddr_in dest;struct in_addr in;struct hostent *phe;char host[1000];int fd, port = 80;

dest.sin_family=AF_INET;dest.sin_port = htons(port);if (phe = gethostbyname(host)) bcopy(phe->h_addr, (char *)&dest.sin_addr, phe->h_length);

An Example BSD Socket Program – a simple client (2/2)

–fd = socket(PF_INET, SOCK_STREAM, 0);in.s_addr = dest.sin_addr.s_addr;connect(fd, (struct sockaddr *)&dest, sizeof(dest));send(fd, msg, strlen(msg), 0);…recv(fd, buf, sizeof(buf), 0);…close(fd);

Windows Socket

• WSAStartup(), WSACleanup()• socket(), connect(), close()• send(), recv()• …

An Example WinSock Client (1/2)

• #include <winsock.h>

SOCKET fd;SOCKADDR_IN dest;WSADATA WSAdata;struct hostent FAR *ent;int port = 80;

WSAStartup(0x1010, &WSAdata);fd = socket(PF_INET, SOCK_STREAM, 0);dest.sin_family = PF_INET;dest.sin_port = htons(port);ent = gethostbyname(hostname);

An Example WinSock Client (2/2)

–connect(fd, (LPSOCKADDR)&dest, sizeof(SOCKADDR));send(fd, msg, strlen(msg), 0);…recv(fd, buf, sizeof(buf), 0);…close(fd);WSACleanup();

Java Socket

• java.net.Socket– new– getInputStream– getOutputStream– close

• java.net.ServerSocket– new– accept– close

An Example Java Socket Client (1/2)

• import java.net.Socket;import java.net.InetSocketAddress;import java.io.BufferedOutputStream;import java.io.BufferedInputStream;public class SockClient { private String address = hostname; private int port = 80;

public SockClient() { Socket client = new Socket(); InetSocketAddress isa = new InetSocketAddress(this.address, this.port);

An Example Java Socket Client (2/2)

– try { client.connect(isa, 10000); BufferedOutputStream out = new BufferedOutputStream(client.getOutputStream()); BufferedInputStream out = new BufferedInputStream(client.getInputStream());out.write(…);in.read(...);in.close();out.close();client.close();} catch () {}

Response Parsing

• Protocol dependent– browser

• HTTP over TCP: connection-oriented

• Byte ordering• Buffer management

Some Protocols in Web Programming

• HTTP • HTML• JSON (JavaScript Object Notation)• XML

HTTP

• HyperText Transfer Protocol– The protocol standard for the World Wide

Web– Defined by IETF, W3C– RFC 2616, HTTP 1.1

• Overview– Web browser (the HTTP client) submits an

HTTP request to the HTTP server, which provides resources (such as HTML files) and returns a response

HTTP Request Message

• Request line: – GET /images/logo.png HTTP/1.1

• Headers – Accept-Language: en

• Empty line• (Each line must end with

<CR><LF>)• Optional message body

Request Methods

• 9 methods indicating the action to be performed on the identified resource– GET– POST– PUT– DELETE– HEAD, TRACE, OPTIONS, CONNECT,

PATCH

Some HTTP Header Fields

• Requests– Accept-Charset– Connection– Content-Type– Content-Length– Date– From – Host

• Responses– Connection– Content-Type– Content-Length– Date

Response Message

• Status line– Status codes

• 404

– Reason phrase• Not found

• Types of status codes– 1xx informational– 2xx success– 3xx redirection– 4xx client error– 5xx server error

Example HTTP Session• Client request

– GET /index.html HTTP/1.1<CR><LF>– Host: www.example.com<CR><LF>– <CR><LF>

• Server response– HTTP/1.1 200 OK– Date: Mon, 23 May 2005 22:38:34 GMT– Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)– Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT– Etag: “3f80f-1b6-3e1cb03b”– Accept-Ranges: bytes– Content-Length: 438– Connection: close– Content-Type: text/html; charset=UTF-8

HTML

• HyperText Markup Language: the language for Web pages– HTML 4.01 (W3C recommendation,

1999)– HTML 5 (W3C working draft, May 2011)

• Elements– Tags: <xxx> … </xxx> – Attributes – Ex: headings, paragraphs, tables, forms,

comments, …

An Example HTML File

• <html> <head> <title>Hello HTML</title> </head> <body> <p>Hello World!</p> </body> </html>

JSON

• JavaScript Object Notation (JSON): a lightweight data-interchange format (http://www.json.org/ )– Easy for humans to read and write– Easy for machines to parse and generate– Based on a subset of JavaScript Programming

Language, but it’s completely language independent

• JSON is built on two structures– Name/value pairs: objects– Ordered list of values: arrays

• More details in RFC 4627

JSON Examples

• { "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor", "Thumbnail": {"Url":"http://www.example.com/image/481989943", "Height": 125, "Width": "100" }, "IDs": [116, 943, 234, 38793] } }

JSON Examples

• [ { "precision": "zip", "Latitude": 37.7668, "Longitude": -122.3959, "Address": "", "City": "SAN FRANCISCO", "State": "CA", "Zip": "94107", "Country": "US" }, { "precision": "zip", "Latitude": 37.371991, "Longitude": -122.026020, "Address": "", "City": "SUNNYVALE", "State": "CA", "Zip": "94085", "Country": "US" } ]

XML

• eXtensible Markup Language: a set of rules for encoding documents in machine-readable form– XML 1.0 (W3C Recommendation)– An application profile of SGML (ISO

8879)

An Example XML File

• <?xml version="1.0"?><note>    <to>Tove</to>    <from>Jani</from>    <heading>Reminder</heading>    <body>Don't forget me this weekend!</body></note>

Programming Exercises

• Packet sending/receiving– {Source, destination} (IP, port number)– Protocol

• A simple HTTP client– To get a Web page at any URL– To display the page content

Thanks for Your Attention!