socket programming 2008-03-04 lee, sooyong [email protected]

20
Socket Programming Socket Programming 2008-03-04 2008-03-04 Lee, Sooyong Lee, Sooyong [email protected]

Upload: carol-oconnor

Post on 31-Dec-2015

217 views

Category:

Documents


1 download

TRANSCRIPT

Socket ProgrammingSocket Programming

2008-03-042008-03-04

Lee, SooyongLee, Sooyong

[email protected]

March. 4March. 4thth, 2008, 2008

SocketSocket

What is a socket?a doordoor between application process and end-to-end transport protocol (TCP/UDP) or IP

22

process

TCP withbuffers,

variables

socket

controlled byapplicationdeveloper

controlled byoperating

system

host orserver

process

TCP withbuffers,

variables

socket

controlled byapplicationdeveloper

controlled byoperatingsystem

host orserver

internet

March. 4March. 4thth, 2008, 2008

Socket APISocket API

Explicitly created, used, released by applications

Client/server paradigm

Two types of transport service via socket API:

unreliable datagram (e.g. UDP)

reliable, byte stream-oriented (e.g. TCP)

33

March. 4March. 4thth, 2008, 2008 Netprog 2000 - Java Network ProgrammingNetprog 2000 - Java Network Programming44

Socket Programming in JavaSocket Programming in Java

Java uses BSD-style sockets to interface with TCP/IP services (java.net package)

Java distinguishes between UDP, TCP server & TCP client sockets

Behind-the-scenes classes do the actual work & can be updated or swapped out transparently

March. 4March. 4thth, 2008, 2008

Socket Programming Socket Programming with TCPwith TCP

55

Client must contact server

server process must first be running

server must have created socket (door) that welcomes client’s contact

Client contacts server by:

creating client-local TCP socket

specifying IP address, port number of server process

When client creates socket: client TCP establishes connection to server TCP

When contacted by client, server TCP creates new socket for server process to communicate with client

allows server to talk with multiple clients

source port numbers used to distinguish clients (more in Chap 3)

TCP provides reliable, in-order transfer of bytes (“pipe”) between client and server

application viewpoint

March. 4March. 4thth, 2008, 2008

TCP Client/Server Interaction, cont.TCP Client/Server Interaction, cont.

wait for incomingconnection requestconnectionSocket =welcomeSocket.accept()

create socket,port=x, forincoming request:welcomeSocket =

ServerSocket()

create socket,connect to hostid, port=xclientSocket =

Socket()

closeconnectionSocket

read reply fromclientSocket

closeclientSocket

Server (running on hostid) Client

send request usingclientSocketread request from

connectionSocket

write reply toconnectionSocket

TCP connection setup

66

March. 4March. 4thth, 2008, 2008

Stream jargonStream jargon

A stream is a sequence of characters that flow into or out of a process.

An input stream is attached to some input source for the process, e.g., keyboard or socket.

An output stream is attached to an output source, e.g., monitor or socket.

77ou

tToS

erve

r

to network from network

inF

rom

Ser

ver

inF

rom

Use

r

keyboard monitor

Process

clientSocket

inputstream

inputstream

outputstream

TCPsocket

Clientprocess

client TCP socket

March. 4March. 4thth, 2008, 2008

Socket Programming with TCPSocket Programming with TCP

Example client-server app:1) client reads line from

standard input (inFromUser stream) , sends to server via socket (outToServer stream)

2) server reads line from socket

3) server converts line to uppercase, sends back to client

4) client reads, prints modified line from socket (inFromServer stream)

88

March. 4March. 4thth, 2008, 2008

Example: Java client (TCP)Example: Java client (TCP)

import java.io.*; import java.net.*; class TCPClient {

public static void main(String argv[]) throws Exception { String sentence; String modifiedSentence;

BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

Socket clientSocket = new Socket("hostname", 6789);

DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());

Createinput stream

Create client socket,

connect to server

Createoutput stream

attached to socket

99

March. 4March. 4thth, 2008, 2008

Example: Java client (TCP), cont.Example: Java client (TCP), cont.

BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

sentence = inFromUser.readLine();

outToServer.writeBytes(sentence + '\n');

modifiedSentence = inFromServer.readLine();

System.out.println("FROM SERVER: " + modifiedSentence);

clientSocket.close(); } }

Createinput stream

attached to socket

Send lineto server

Read linefrom server

1010

March. 4March. 4thth, 2008, 2008

Example: Java server (TCP)Example: Java server (TCP)import java.io.*; import java.net.*;

class TCPServer {

public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence;

ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Socket connectionSocket = welcomeSocket.accept();

BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));

Createwelcoming socket

at port 6789

Wait, on welcomingsocket for contact

by client

Create inputstream, attached

to socket

1111

March. 4March. 4thth, 2008, 2008

Example: Java server (TCP), contExample: Java server (TCP), cont

DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());

clientSentence = inFromClient.readLine();

capitalizedSentence = clientSentence.toUpperCase() + '\n';

outToClient.writeBytes(capitalizedSentence); } } }

Read in linefrom socket

Create outputstream, attached

to socket

Write out lineto socket

End of while loop,loop back and wait foranother client connection

1212

March. 4March. 4thth, 2008, 2008

Socket Programming Socket Programming with UDPwith UDP

UDP: no “connection” between client and server

no handshaking sender explicitly attaches IP

address and port of destination to each packet

server must extract IP address, port of sender from received packet

UDP: transmitted data may be received out of order, or lost

application viewpoint

UDP provides unreliable transfer of groups of bytes (“datagrams”)

between client and server

1313

March. 4March. 4thth, 2008, 2008

Client/server socket interaction: UDPClient/server socket interaction: UDP

closeclientSocket

Server (running on hostid)

read reply fromclientSocket

create socket,clientSocket = DatagramSocket()

Client

Create, address (hostid, port=x,send datagram request using clientSocket

create socket,port=x, forincoming request:serverSocket = DatagramSocket()

read request fromserverSocket

write reply toserverSocketspecifying clienthost address,port number

1414

March. 4March. 4thth, 2008, 2008

Example: Java client (UDP)Example: Java client (UDP)

sendP

acket

to network from network

receiv

eP

acket

inF

rom

User

keyboard monitor

Process

clientSocket

UDPpacket

inputstream

UDPpacket

UDPsocket

Output: sends packet (recallthat TCP sent “byte stream”)

Input: receives packet (recall that TCP received “byte stream”)

Clientprocess

client UDP socket

1515

March. 4March. 4thth, 2008, 2008

Example: Java client (UDP)Example: Java client (UDP)

import java.io.*; import java.net.*; class UDPClient { public static void main(String args[]) throws Exception { BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientSocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("hostname"); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); sendData = sentence.getBytes();

Createinput stream

Create client socket

Translate hostname to IP

address using DNS

1616

March. 4March. 4thth, 2008, 2008

Example: Java client (UDP), cont.Example: Java client (UDP), cont.

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } }

Create datagram with data-to-send,

length, IP addr, port

Send datagramto server

Read datagramfrom server

1717

March. 4March. 4thth, 2008, 2008

Example: Java server (UDP)Example: Java server (UDP)

import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(9876); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket);

Createdatagram socket

at port 9876

Create space forreceived datagram

Receivedatagram

1818

March. 4March. 4thth, 2008, 2008

Example: Java server (UDP), contExample: Java server (UDP), cont

String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase();

sendData = capitalizedSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); } } }

Get IP addrport #, of

sender

Write out datagramto socket

End of while loop,loop back and wait foranother datagram

Create datagramto send to client

1919

March. 4March. 4thth, 2008, 2008

Any Questions?Any Questions?

2020