Part 3.1(supp) - PowerPoint PPT Presentation

About This Presentation
Title:

Part 3.1(supp)

Description:

In java, java.io.PrintStream is used to send data. e.g. method println ... create a socket and connect to the specified server. ... – PowerPoint PPT presentation

Number of Views:14
Avg rating:3.0/5.0
Slides: 20
Provided by: KimKih5
Category:
Tags: create | part | supp

less

Transcript and Presenter's Notes

Title: Part 3.1(supp)


1
Part 3.1(supp)
  • Java Socket Details (supplemental materials)
  • (Client-Server Concept,
  • Use of Protocol Ports, Socket API)

2
Creating a Socket
  • Application calls socket function
  • OS returns descriptor for socket
  • Descriptor valid until application closes socket
    or exits
  • Common protofamily PF_INET,
    type SOCK_STREAM or SOCK_DGRAM
  • In Java, to create a client socket
  • Socket socket new Socket(string host, int port)
  • To create a server socket
  • ServerSocket sSocket new ServerSocket(int port)

desc socket(protofamily,type,proto)
3
Socket Functionality
  • Socket completely general
  • Can be used
  • By client
  • By server
  • With a CO transport protocol
  • With a CL transport protocol
  • To send data, receive data, or both
  • Large set of operations

4
Socket Operations
  • Close
  • Terminate use of socket
  • Permanent
  • In Java, use socket.close()
  • or sSocket.close()

close(socket)
5
Socket Operations
  • Bind
  • Specify protocol port for a socket
  • Specify local IP address for a socket
  • Can use INADDR_ANY for any IP address
  • In Java, use socket.bind(SocketAddress endpoint)
    to bind the socket to a IP address and port.

bind(socket,localaddr,addrlen)
6
Generic Address Format
  • struct sockaddr
  • u_char sa_len /length of address/
  • u_char sa_family /family of address/
  • char sa_data14 /address itself/

7
TCP/IP Address Format
  • struct sockaddr_in
  • u_char sin_len /length of address/
  • u_char sin_family /family of address/
  • u_short sin_port /protocol port number/
  • struct in_addr sin_addr /IP address/
  • char sin_zero8 /not used(set to zero)/

8
Socket Operations (continued)
  • Listen
  • Used by server
  • Prepares socket to accept incoming connections
  • Accept
  • Used by server
  • Waits for next connection and returns new socket
  • In Java, method accept() in java.net.ServerSocket
    class listens for a connection and accepts it.

listen(socket,queuesize)
newsock accept(socket,caddr,caddrlen)
9
Socket Operations (continued)
  • Connect
  • Used by client
  • Either
  • Performs a TCP connection
  • Fully specifies addresses for UDP
  • In Java, connect(SocketAddress server) to connect
    the socket to a specific server.

connect(socket,saddr,saddrlen)
10
Two Purposes of the Connect Function
  • The connect function, which is called by clients,
    has two uses. With connection-oriented
    transport, connect establishes a transport
    connection to a specified server. With
    connectionless transport, connect records the
    servers address in the socket, allowing the
    client to send many messages to the same server
    without specifying the destination address with
    each message.

11
Socket Operations (continued)
  • Send, sendto, and sndmsg
  • Transfer outgoing data from application
  • In java, java.io.PrintStream is used to send
    data. e.g. method println()

send(socket,data,length,flags)
sendto(socket,data,length,flags, destaddr,addrle
n)
sendmsg(socket,msgstruct,flags)
12
Format of msgstruct
struct msgstruct struct sockaddr m_saddr
/dest address/ struct datavec m_dvec
/message (vector)/ int mdvlength
/size of vector/ struct access m_rights
/access rights/ int m_alength /size of
access rights/
13
Socket Operations (continued)
  • Recv, recvfrom, and recvmsg
  • Transfer incoming data to application
  • In Java, java.io.BufferReader used to receive
    data. E.g. method readline()

recv(socket,buffer,length,flags)
recvfrom(socket,buffer,length,flags, senderaddr,
saddrlen)
recvmsg(socket,msgstruct,flags)
14
Java Code Equivalent to Example in Chapter 30
15
Example Server Java Code
import java.io. import java.net. public
class server public static void
main(String args) // variable declaration
int visits 0 ServerSocket srv
null PrintStream os Socket clientSocket
null String msg "" //check command-line
argument ... //(omited)
16
  • / create socket /
  • try
  • srv new ServerSocket(Integer.parseInt(args
    0))
  • catch (IOException e)
  • System.out.println(e)
  • / Main server loop - accept and handle requests
    /
  • while(true)
  • try // listen for a connection from client and
    accept it.
  • clientSocket srv.accept()
  • catch(IOException e)
  • System.out.println("accept failed")
  • System.exit(1)

17
  • try
  • os new PrintStream(clientSocket.getOutputStream
    ())
  • visits
  • msg "This server has been contacted " visits
    " times"
  • os.println(msg) //sends msg
  • os.close()
  • clientSocket.close()
  • catch(IOException e)
  • System.out.println(e)

18
Example Client Java Code
  • import java.io.
  • import java.net.
  • public class client
  • public static void main(String args)
  • //variable declaration
  • Socket socket null
  • BufferedReader in null
  • //check command-line argument...
  • //(omited)

19
  • try
  • / create a socket and connect to the specified
    server. /
  • socket new Socket(args0,
    Integer.parseInt(args1))
  • catch (UnknownHostException e)
  • System.exit(1)
  • catch (IOException e)
  • System.out.println("connect failed")
  • System.exit(1)
  • / read data from socket and write to user's
    screen. /
  • try
  • in new BufferedReader(new
    InputStreamReader(socket.getInputStream()))
  • System.out.println(in.readLine())
  • in.close()
  • socket.close()
  • catch(IOException e)
  • System.out.println(e)
Write a Comment
User Comments (0)
About PowerShow.com