socket programming l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Socket programming PowerPoint Presentation
Download Presentation
Socket programming

Loading in 2 Seconds...

play fullscreen
1 / 30

Socket programming - PowerPoint PPT Presentation


  • 161 Views
  • Uploaded on

a host-local , application-created , OS-controlled interface (a “door”) into which application process can both send and receive messages to/from another application process. socket. Socket programming.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Socket programming' - katoka


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
socket programming

a host-local,

application-created,

OS-controlled interface (a “door”) into which

application process can both send and

receive messages to/from another application process

socket

Socket programming

Goal: learn how to build client/server application that communicate using sockets

Socket API

  • introduced in BSD4.1 UNIX, 1981
  • explicitly created, used, released by apps
  • client/server paradigm
  • two types of transport service via socket API:
    • unreliable datagram
    • reliable, byte stream-oriented

2: Application Layer

socket programming using tcp

process

process

TCP with

buffers,

variables

TCP with

buffers,

variables

socket

socket

Socket-programming using TCP

Socket: a door between application process and end-end-transport protocol (UCP or TCP)

TCP service: reliable transfer of bytesfrom one process to another

controlled by

application

developer

controlled by

application

developer

controlled by

operating

system

controlled by

operating

system

internet

host or

server

host or

server

2: Application Layer

socket programming with tcp
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

Socket programming with TCP

2: Application Layer

stream 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, eg, keyboard or socket.

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

Stream jargon

2: Application Layer

socket programming with tcp5
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)

Socket programming with TCP

Client

process

client TCP socket

2: Application Layer

client server socket interaction tcp

create socket,

connect to hostid, port=x

create socket,

port=x, for

incoming request:

clientSocket =

Socket()

welcomeSocket =

ServerSocket()

TCP

connection setup

wait for incoming

connection request

connectionSocket =

welcomeSocket.accept()

send request using

clientSocket

read request from

connectionSocket

write reply to

connectionSocket

read reply from

clientSocket

close

connectionSocket

close

clientSocket

Client/server socket interaction: TCP

Server (running on hostid)

Client

2: Application Layer

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());

Create

input stream

Create

client socket,

connect to server

Create

output stream

attached to socket

2: Application Layer

example java client tcp cont
Example: Java client (TCP), cont.

Create

input stream

attached to socket

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();

}

}

Send line

to server

Read line

from server

2: Application Layer

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()));

Create

welcoming socket

at port 6789

Wait, on welcoming

socket for contact

by client

Create input

stream, attached

to socket

2: Application Layer

example java server tcp cont
Example: Java server (TCP), cont

DataOutputStream outToClient =

new DataOutputStream(connectionSocket.getOutputStream());

clientSentence = inFromClient.readLine();

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

outToClient.writeBytes(capitalizedSentence);

}

}

}

Create output

stream, attached

to socket

Read in line

from socket

Write out line

to socket

End of while loop,

loop back and wait for

another client connection

2: Application Layer

socket programming with 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

UDP provides unreliable transfer

of groups of bytes (“datagrams”)

between client and server

application viewpoint

Socket programming with UDP

2: Application Layer

client server socket interaction udp

Client

create socket,

port=x, for

incoming request:

serverSocket =

DatagramSocket()

create socket,

clientSocket =

DatagramSocket()

Create, address (hostid, port=x,

send datagram request

using clientSocket

read request from

serverSocket

write reply to

serverSocket

specifying client

host address,

port number

read reply from

clientSocket

close

clientSocket

Client/server socket interaction: UDP

Server (running on hostid)

2: Application Layer

example java client udp
Example: Java client (UDP)

Client

process

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

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

client UDP socket

2: Application Layer

example java client udp14
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();

Create

input stream

Create

client socket

Translate

hostname to IP

address using DNS

2: Application Layer

example java client udp cont
Example: Java client (UDP), cont.

Create datagram with data-to-send,

length, IP addr, port

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();

}

}

Send datagram

to server

Read datagram

from server

2: Application Layer

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);

Create

datagram socket

at port 9876

Create space for

received datagram

Receive

datagram

2: Application Layer

example java server udp cont
Example: 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 addr

port #, of

sender

Create datagram

to send to client

Write out

datagram

to socket

End of while loop,

loop back and wait for

another datagram

2: Application Layer

udp sockets
UDP Sockets
  • int socket(int domain, int type, int protocol);
  • int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
  • ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
  • ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sock-addr *from, socklen_t *fromlen);

2: Application Layer

udp sockets19
UDP Sockets
  • int socket(int domain, int type, int protocol);
  • socket() creates an endpoint for communication and returns a descriptor.

Domain:

PF_INET IPv4 Internet protocols ip(7)

PF_INET6 IPv6 Internet protocols

Type:

SOCK_STREAM: TCP Sockets

SOCK_DGRAM: UDP Sockets

Protocol:

The protocol specifies a particular protocol to be used with the

socket. Normally only a single protocol exists to support a particular

socket type within a given protocol family, in which a case protocol

can be specified as 0.

2: Application Layer

udp sockets20
UDP Sockets
  • int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
  • Bind() gives the socket sockfd the local address my_addr. my_addr is addrlen bytes long.

Setting up the socket addr structure:

struct cliAddr;

cliAddr.sin_family = AF_INET;

cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);

cliAddr.sin_port = htons(0);

2: Application Layer

udp sockets21
UDP Sockets
  • ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
  • s = Socket descriptor
  • buf = Message to send
  • len = Length of message
  • flags = Normally 0, specifies the behavior of the socket
  • to = Pointer to the sockaddr structure that contains the destination (IP and port)
      • remoteAddr.sin_port
      • remoteAddr.sin_addr.s_addr
  • tolen = Length of remoteAddr socket

2: Application Layer

udp sockets22
UDP Sockets
  • ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sock-addr *from, socklen_t *fromlen);
  • s = Socket descriptor
  • buf = Pointer of buffer of which will be filled by the message.
  • len = The length of the buffer
  • flags = Normally 0, specifies the behavior of the socket
  • from = Pointer to the sockaddr structure that contains the destination (IP and port)
      • remoteAddr.sin_port
      • remoteAddr.sin_addr.s_addr
  • fromlen = Length of sockaddr struct

2: Application Layer

udp client example
UDP Client Example

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <netdb.h>

#include <stdio.h>

#include <unistd.h>

#include <string.h> /* memset() */

#include <sys/time.h> /* select() */

#include <stdlib.h>

#include <readline/readline.h>

#include <readline/history.h>

#define REMOTE_SERVER_PORT 1500 //bind to port 1500

#define MAX_MSG 100

int main(int argc, char *argv[]) {

int sd, rc, i;

struct sockaddr_in cliAddr, remoteServAddr;

struct hostent *h;

2: Application Layer

slide24
/* get server IP address (no check if input is IP address or DNS name */

h = gethostbyname(argv[1]);

if(h==NULL) {

printf("%s: unknown host '%s' \n", argv[0], argv[1]);

exit(1);

}

printf("%s: sending data to '%s' (IP : %s) \n", argv[0], h->h_name,

inet_ntoa(*(struct in_addr *)h->h_addr_list[0]));

remoteServAddr.sin_family = h->h_addrtype;

memcpy((char *) &remoteServAddr.sin_addr.s_addr,

h->h_addr_list[0], h->h_length);

remoteServAddr.sin_port = htons(REMOTE_SERVER_PORT);

/* socket creation */

sd = socket(AF_INET,SOCK_DGRAM,0);

if(sd<0) {

printf("%s: cannot open socket \n",argv[0]);

exit(1);

}

/* bind any port */

cliAddr.sin_family = AF_INET;

/* pick any available network interface */

cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);

/* bind to any local port */

cliAddr.sin_port = htons(0);

2: Application Layer

slide25
rc = bind(sd, (struct sockaddr *) &cliAddr, sizeof(cliAddr));

if(rc<0) {

printf("%s: cannot bind port\n", argv[0]);

exit(1);

}

char* line;

int sent;

/* send data */

while(1){

/* Prompt user for string and send to the server */

line = readline("Enter text: ");

sent = sendto(sd, line, strlen(line)+1, 0,

(struct sockaddr *) &remoteServAddr,

sizeof(remoteServAddr));

if(sent<0) {

printf("%s: cannot send data\n",line);

close(sd);

exit(1);

}

2: Application Layer

slide26
char msg[MAX_MSG];

/* receive response from server */

int remoteServSize = sizeof(remoteServAddr);

rc = recvfrom(sd,msg,MAX_MSG, 0, (struct sockaddr*) &remoteServAddr, &remoteServSize);

if(rc<0){

printf("Error occurred receiving from server\n");

exit(1);

}

printf("%s\n", msg);

}

return 1;

}

2: Application Layer

udp server example
UDP Server Example

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <netdb.h>

#include <stdio.h>

#include <unistd.h> /* close() */

#include <string.h> /* memset() */

#include <stdlib.h>

#include <string.h>

#define LOCAL_SERVER_PORT 1500 /* Listen on port 1500 */

#define MAX_MSG 100

#define MAX_RESPONSE 1024

int main(int argc, char *argv[]) {

int sd, rc, n, cliLen;

struct sockaddr_in cliAddr, servAddr;

char msg[MAX_MSG];

/* socket creation */

sd=socket(AF_INET, SOCK_DGRAM, 0);

if(sd<0) {

printf("%s: cannot open socket \n",argv[0]);

exit(1);

}

2: Application Layer

slide28
/* bind local server port */

servAddr.sin_family = AF_INET;

/* Accept a connection from interface */

servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

/* Listen on Port 1500 */

servAddr.sin_port = htons(LOCAL_SERVER_PORT);

rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr));

if(rc<0) {

printf("%s: cannot bind port number %d \n",

argv[0], LOCAL_SERVER_PORT);

exit(1);

}

printf("%s: waiting for data on port UDP %u\n",

argv[0],LOCAL_SERVER_PORT);

/* server infinite loop */

while(1) {

/* init buffer */

memset(msg,0x0,MAX_MSG);

/* receive message */

cliLen = sizeof(cliAddr);

n = recvfrom(sd, msg, MAX_MSG, 0,

(struct sockaddr *) &cliAddr, &cliLen);

2: Application Layer

slide29
if(n<0) {

printf("%s: cannot receive data \n",argv[0]);

continue;

}

/* print received message */

printf("%s: from %s:UDP%u : %s \n",

argv[0],inet_ntoa(cliAddr.sin_addr),

ntohs(cliAddr.sin_port),msg);

char response[MAX_RESPONSE];

char* responseMsg = "Received your message: ";

int len = strlen(responseMsg) + 1;

strcpy(response,responseMsg);

strncat(response,msg,MAX_RESPONSE-len);

n = sendto(sd, response, strlen(response)+1,0,(struct sockaddr*) &cliAddr, sizeof(cliAddr));

if(n<0){

printf("Error sending to client\n");

exit(1);

}

}/* end of server infinite loop */

return 0;

}

2: Application Layer

gdb basics
GDB Basics
  • How to setup the environment to dump core files:
    • csil% ulimit –c unlimited
  • How to open a core file
    • csil% gdb –q ./executable corename (the parameter –q is optional. The will prevent GDB from printing out extra garbage when it initially loads)
  • What to do when a core file is loaded up
    • (gdb) bt (backtrace)
      • Will show you the stack when the program crashed
  • More useful to run your program with GDB.
    • csil% gdb –q ./executable
      • Set breakpoints: (gdb) b <line number> OR b <function name>
      • Run the program: (gdb) r <commandline params>
        • The program will break when it reaches a breakpoint
        • Print value of a variable: (gdb) print <variable name>
        • Step through a function: (gdb) s
        • Skip to the next instruction: (gdb) n
        • Continue until the program exits or another breakpoint is reached:

(gdb) c

2: Application Layer