44
Client / Server Programming in Java

Client / Server Programming in Java

Embed Size (px)

DESCRIPTION

Client / Server Programming in Java. Client / Server in Java. Primary communications is through sockets. (Web type access also available through URL class) - PowerPoint PPT Presentation

Citation preview

Page 1: Client / Server Programming in Java

Client / Server Programmingin Java

Page 2: Client / Server Programming in Java

Client / Server in Java

• Primary communications is through sockets.– (Web type access also available through URL class)

• Browser security limits the access that a program can have when run as an applet. (Typically limited to opening a socket back on its host machine). So.. applets are typically clients.

• “Default” socket is stream (TCP).• Socket classes implemented in java.net package

cs423-cotter 2

Page 3: Client / Server Programming in Java

Basic Sockets Classes

• Socket• ServerSocket• SocketAddress• InetAddress• Datagram Socket• Datagram Packet• Multicast Socket• URL

cs423-cotter 3

Page 4: Client / Server Programming in Java

Socket Client/Server in Java

• Typically client is applet, but can be command line or graphical application

• Server is written as java application or even in some other language (c, c++, etc.).

• Where client access is through the Web , the server must be running on the web server machine.

cs423-cotter 4

Page 5: Client / Server Programming in Java

TCPecho / TCPechosC:\data\cs423_sp12\java\TCPechos\dist>java -jar TCPechos.jar 3456Serv: Initializing to port 3456Serv: Waiting for a connection...Serv: Receved a connection*---------------*Srx: Connected to: /127.0.0.1:12405We just received: (14) This is a testWe just received: (20) This is another testSrvx disconnected from /127.0.0.1*---------------------*Serv: Waiting for a connection...

C:\data\cs423_sp12\java\TCPechos\dist>

C:\data\cs423_sp12\java\basicTCPecho\dist>java -jar basicTCPecho.jar localhost 3456Enter text to read: This is a testClient: Rcvd from server: This is a test (14 bytes)Enter text to read: This is another testClient: Rcvd from server: This is another test (20 bytes)Enter text to read: bye

C:\data\cs423_sp12\java\basicTCPecho\dist>

cs423-cotter 5

Page 6: Client / Server Programming in Java

Iterative TCP echo Server

package tcpechos;

import java.net.*;import java.io.*;

public class TCPechos {

public static void main(String[] args) {

Socket sock; ServerSocket ssock; InputStream isIn; PrintStream psOut; int iNumRead, numPort; String sendMsg, port = "5678"; byte abIn[] = new byte[1024];

cs423-cotter 6

Page 7: Client / Server Programming in Java

Iterative TCP echo Server // Handle command line arguments switch (args.length) { case 1: port = args[0]; break; case 0: break; default: System.out.println("Illegal number of arguments."); System.exit(1); } numPort = Integer.parseInt(port); //port number must be an int for Socket

System.out.println ("Serv: Initializing to port " + numPort);

cs423-cotter 7

Page 8: Client / Server Programming in Java

Iterative TCP echo Server try { // Create the server socket and bind it to our port ssock = new ServerSocket (numPort); while (true) {

// Wait for a client request System.out.println ("Serv: Waiting for a connection..."); sock = ssock.accept();

// We got a connection request! Print out info and start talking System.out.println ("Serv: Receved a connection"); System.out.println ("*---------------*"); System.out.println ("Srx: Connected to: " +sock.getInetAddress() + ":" +sock.getPort()); psOut = new PrintStream (sock.getOutputStream()); isIn = sock.getInputStream(); iNumRead = 0;

cs423-cotter 8

Page 9: Client / Server Programming in Java

Iterative TCP echo Server while (iNumRead >= 0) { //Keep reading as long as we get data iNumRead = isIn.read(abIn, 0, 1024); if (iNumRead < 0) break; sendMsg = new String(abIn,0,iNumRead); System.out.println("We just received: (" +iNumRead + ") " + sendMsg); //Note that the received message includes '\n' and //we add one of our own with println psOut.print(sendMsg); iNumRead = 0; } sock.close(); System.out.println ("Srvx disconnected from " + sock.getInetAddress()); System.out.println ("*---------------------*"); } //end of while } //end of try catch (Exception e) { System.err.println (":Serv: Exception in main: " + e); } } //end of main()} //end of TCPechos

cs423-cotter 9

Page 10: Client / Server Programming in Java

Basic TCP echo Clientimport java.io.*;import java.util.*;

public class BasicTCPecho { public static void main(String[] args) { // TODO code application logic here Socket sock; String sIn, host = "localhost", port = "5678"; //default host and port InputStream isIn; PrintStream psOut; byte abIn[] = new byte[1024]; int iNumRead, numPort; Scanner input;

cs423-cotter 10

Page 11: Client / Server Programming in Java

Basic TCP echo Client // Deal with any command line arguments switch (args.length) { case 2: port = args[1]; case 1: host = args[0]; break; case 0: break; default: System.out.println("Illegal number of arguments."); System.exit(1); } numPort = Integer.parseInt(port); //port number must be an int for Socket

cs423-cotter 11

Page 12: Client / Server Programming in Java

Basic TCP echo Client try { sock = new Socket(host, numPort); isIn = sock.getInputStream(); psOut = new PrintStream(sock.getOutputStream()); input = new Scanner (System.in); while (true) { //First we get some text from the user. System.out.print("Enter text to read: "); sIn = input.nextLine(); //If we typed “bye”, then exit client if (sIn.equals("bye")) { sock.close(); break; }

cs423-cotter 12

Page 13: Client / Server Programming in Java

Basic TCP echo Client

//next we send that to the server psOut.print(sIn); //Now, wait for something to come back... iNumRead = isIn.read(abIn,0,1024); if (iNumRead < 0) { break; //connection has been closed } String str = new String(abIn,0,iNumRead); System.out.println("Client: Rcvd from server: " + str + " (" + iNumRead + " bytes)"); } sock.close(); } catch (Exception e) { System.out.println("Client: exception " + e); } }//end of main}//end of class

cs423-cotter 13

Page 14: Client / Server Programming in Java

Threads in Java• Multithreading built into Java language• Thread (String threadName)• Thread ( ) (named “Thread- + number”))

• Thread States– born– ready– running– waiting– sleeping– dead– blocked

cs423-cotter 14

Page 15: Client / Server Programming in Java

Thread State Diagram

cs423-cotter 15

born

ready

running

waiting sleeping dead blocked

Page 16: Client / Server Programming in Java

Thread Priorities

• Priority range 1 to 10• Thread.MIN_PRIORITY = 1;• Thread.MAX_PRIORITY = 10;• Thread.NORM_PRIORITY = 5;• Thread.setPriority (int);• Thread.getPriority( );• Threads processed in priority order, with round-

robin processing within a priority• Starvation possible

cs423-cotter 16

Page 17: Client / Server Programming in Java

Thread class

public class Thread extends Object implements Runnable{

Thread ( );Thread (Runnable object);run ( );start ( );getPriority ( );sleep ( );wait ( );notify ( );....

;

cs423-cotter 17

Page 18: Client / Server Programming in Java

Implementing Threads (1)Subclassing the Thread classclass MyNuThread extends Thread {

private data ....;public MyNuThread ( ) {

do constructor stuff here;}public void run( ) {

here’s where work is done}

}

cs423-cotter 18

Page 19: Client / Server Programming in Java

Using Threads (1)

MyNuThread thread1 = new MyNuThread ( );

thread1.start( );

cs423-cotter 19

Page 20: Client / Server Programming in Java

Implementing Threads (2)Make an existing class runnableclass ServerExtension implements Runnable {

private data....;public ServerExtension( ) {

do constructor stuff here;}public void run( ) {

do work stuff here}

}

cs423-cotter 20

Page 21: Client / Server Programming in Java

Using extended classes

ServerExtension servx = new ServerExtension( );Thread thServx = new Thread (servx);thServx.start();

cs423-cotter 21

Page 22: Client / Server Programming in Java

Multi-threaded server OutputC:\data\cs423_sp12\java>java -jar TCPechod.jarServ: Initializing to port 3456Serv: Waiting for a connection...Serv: Received connection 1Serv: Waiting for a connection...*---------------*Srx: Connected to: /127.0.0.1:47871We just received: (21) This is from client 1Serv: Received connection 2Serv: Waiting for a connection...*---------------*Srx: Connected to: /127.0.0.1:47872We just received: (21) This is from client 2We just received: (29) This is another from client 1We just received: (22) We're back to client 2Srvx disconnected from /127.0.0.1*---------------------*Srvx disconnected from /127.0.0.1*---------------------*Srvx disconnected from /127.0.0.1*---------------------*Srvx disconnected from /127.0.0.1*---------------------*

C:\data\cs423_sp12\java\basicTCPecho\dist>java -jar basicTCPecho.jar localhost 3456Enter text to read: This is from client 1Client: Rcvd from server: This is from client 1 (21 bytes)Enter text to read: This is another from client 1Client: Rcvd from server: This is another from client 1 (29 bytes)Enter text to read: bye

C:\data\cs423_sp12\java\basicTCPecho\dist>java -jar basicTCPecho.jar localhost 3456Enter text to read: This is from client 2Client: Rcvd from server: This is from client 2 (21 bytes)Enter text to read: We're back to client 2Client: Rcvd from server: We're back to client 2 (22 bytes)Enter text to read: bye

C:\data\cs423_sp12\java\basicTCPecho\dist

cs423-cotter 22

Page 23: Client / Server Programming in Java

Multi-threaded TCPecho Server

cs423-cotter 23

package tcpechod;

import java.net.*;import java.io.*; public class TCPechod {

public static int counter = 0;

public static void main(String[] args) { Socket sock; ServerSocket ssock; Thread thServx; ServerExtension servx; System.out.println ("Serv: Initializing to port 3456");

Page 24: Client / Server Programming in Java

Multi-threaded TCPecho Server

cs423-cotter 24

try { ssock = new ServerSocket (3456); while (true) { System.out.println ("Serv: Waiting for a connection..."); sock = ssock.accept(); counter++; System.out.println ("Serv: Received connection " + counter); servx = new ServerExtension(sock); String name = Integer.toString(counter); thServx = new Thread (servx, name); thServx.start(); } } catch (Exception e) { System.err.println (":Serv: lException in main: " + e); } }}

Page 25: Client / Server Programming in Java

Multi-threaded TCPecho Server

cs423-cotter 25

class ServerExtension implements Runnable { private Socket sock; private InputStream isIn; private PrintStream psOut; private String count;

public ServerExtension (Socket s) { sock = s; count = Integer.toString(TCPechod.counter); }

public void run () { int iNumRead; String sendMsg; byte abIn[] = new byte[1024]; System.out.println ("*---------------*"); System.out.println("Srx: Connected to: " + sock.getInetAddress() + ":“

+sock.getPort());

Page 26: Client / Server Programming in Java

Multi-threaded TCPecho Server

cs423-cotter 26

try { psOut = new PrintStream (sock.getOutputStream()); isIn = sock.getInputStream(); iNumRead = 0; while (iNumRead >= 0) {

iNumRead = isIn.read(abIn, 0, 1024); if (iNumRead < 0) break; sendMsg = new String(abIn,0,iNumRead); System.out.println("We just received: (" +iNumRead + ") " + sendMsg); //Note that the received message includes '\n' and //we add one of our own with println psOut.print(sendMsg);

iNumRead = 0; } // end of while

Page 27: Client / Server Programming in Java

Multi-threaded TCPecho Server

cs423-cotter 27

sock.close(); System.out.println ("Srvx disconnected from " + sock.getInetAddress()); System.out.println ("*---------------------*"); }//end of try catch (Exception e) {

System.err.println (":Serv: Exception in main: " + e); } System.out.println ("Srvx disconnected from " + sock.getInetAddress()); System.out.println ("*---------------------*"); }}

Page 28: Client / Server Programming in Java

NetBeans Graphical Client

cs423-cotter 28

Page 29: Client / Server Programming in Java

NetBeans Project

• TCPecho– build– dist

• TCPecho.jar– nbproject– src

• META-INF• tcpecho

– resources– TCPechoAboutBox.form– TCPechoAboutBox.java– TCPechoApp.java– TCPechoView.form– TCPechoView.java

cs423-cotter 29

Page 30: Client / Server Programming in Java

NetBeans Project Structure

• TCPechoApp.java– Basic application shell. – Application class with main() method– startup() method creates and shows TCPechoView

• TCPechoView.java– In NetBeans 7.0, GUI built drag-and-drop. Code generated

from objects created. – Actions added to buttons by identifying ActionPerformed

methods and then adding in actions to that method.• TCPechoAboutBox.java– Automatically constructed dialog box.

cs423-cotter 30

Page 31: Client / Server Programming in Java

NetBeans Project Layout

cs423-cotter 31

Page 32: Client / Server Programming in Java

UDP Temperature Serverimport java.net.*;import java.io.*;

class TempServer{

public static void main (String argv[]){

DatagramSocket sock; DatagramPacket sendPacket, recvPacket;

int tempF; int tempC;

try{ sock = new DatagramSocket (5678); System.out.println ("Serv: Bound to port 5678");

cs423-cotter 32

Page 33: Client / Server Programming in Java

UDP Temperature Server

while (true){

System.out.println ("Serv: Waiting for a request..."); byte data[] = new byte[25]; recvPacket = new DatagramPacket (data, data.length); sock.receive(recvPacket);

System.out.println ("Serv: Received a packet..."); String tempFs = new String(recvPacket.getData(),0,recvPacket.getLength()); tempF = Integer.parseInt(tempFs); tempC = (int)(5*(tempF -32)/9);

String tempCs = Integer.toString(tempC); data = tempCs.getBytes(); sendPacket = new DatagramPacket (data, data.length, recvPacket.getAddress(),

recvPacket.getPort()); sock.send(sendPacket); System.out.println("We got a temp of " + tempFs + " and returned " + tempCs);

}

cs423-cotter 33

Page 34: Client / Server Programming in Java

UDP Temperature Server

}

catch (Exception e) { System.err.println (":Serv: lException in main: " + e); } }//end of main}//end of class

cs423-cotter 34

Page 35: Client / Server Programming in Java

Graphical UDP Temperature Client

cs423-cotter 35

Page 36: Client / Server Programming in Java

Graphical UDP Temperature Clientimport java.awt.*, javax.swing.* java.awt.event.* java.net.* java.io.*;

public class udpTemp extends JFrame implements WindowListener, ActionListener{

udpTemp() //Build graphical layoutpublic void actionPerformed(ActionEvent evt) // handle eventspublic static void main (String[] args) // start the programpublic void windowClosing(WindowEvent e) //Handle Window eventsprivate TextField portField;:private DatagramSocket sock;

}//end of class

cs423-cotter 36

Page 37: Client / Server Programming in Java

UDP Temp Client - constructorudpTemp() {

setTitle("UDP Temp Demo");setSize(400,300);addWindowListener (this);//setBackground(Color.blue);bgColor = new Color(16, 134, 197);setLayout(new BorderLayout());Panel p = new Panel();p.setBackground(bgColor);p.setLayout(new FlowLayout());Button convertButton = new Button("Convert");convertButton.addActionListener(this);p.add(convertButton);hostField = new TextField("localhost", 25);p.add(hostField);

cs423-cotter 37

Page 38: Client / Server Programming in Java

UDP Temp Client - constructorportField = new TextField("5678", 6);p.add(portField);add("North",p);Panel p2 = new Panel();p2.setLayout(new FlowLayout());p2.setBackground(bgColor);tempFField = new TextField("75", 4);p2.add(tempFField);tempCField = new TextField("", 4);p2.add(tempCField);add("Center",p2);Panel p3 = new Panel();p3.setBackground(bgColor);resultField = new TextArea("results...",8,40);p3.add(resultField);add("South",p3);

}//end of constructor. cs423-cotter 38

Page 39: Client / Server Programming in Java

UDP Temp Client - actionPerformed

public void actionPerformed(ActionEvent evt)

{InetAddress ia = null;InputStream isIn;PrintStream psOut;byte abIn[] = new byte[1024];byte abOut[] = new byte[1024];int iNumRead, iNumSent;if (evt.getActionCommand().equals("Convert")){

int portNumber = (new Integer(portField.getText())).intValue();String s1 = "The port number is " + portNumber + "\n";resultField.setText(s1);

cs423-cotter 39

Page 40: Client / Server Programming in Java

UDP Temp Client - actionPerformed try

{String hostName = hostField.getText();s1 = "The host is " + hostName + "\n";resultField.append(s1);ia = InetAddress.getByName(hostName);sock = new DatagramSocket ();String tempF = tempFField.getText();s1 = "The temperature is " + tempF + "\n";resultField.append(s1);

abOut = tempF.getBytes(); sendPacket = new DatagramPacket (abOut, abOut.length, ia, portNumber); sock.send (sendPacket);

s1 = "We just sent a packet\n";resultField.append(s1);

recvPacket = new DatagramPacket (abIn, abIn.length); sock.receive(recvPacket);

String str = new String (recvPacket.getData(), 0, recvPacket.getLength());tempCField.setText(str);

cs423-cotter 40

Page 41: Client / Server Programming in Java

UDP Temp Client - actionPerformed

} catch (Exception exc) {

System.out.println ("Clnt: Exception reading server data: " + exc);}

}//end of if Convert...}//end fo ActionPerformed

cs423-cotter 41

Page 42: Client / Server Programming in Java

UDP Temp Client – window methodspublic void windowClosing(WindowEvent e) {

try { String s1 = "Goodbye ..."; resultField.setText(s1); Thread.sleep(750);}catch (Exception exc) { System.out.println("Exception" + exc); }System.exit(0);

}

public void windowOpened(WindowEvent e) { System.out.println ("Opening Window"); }

public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {}

cs423-cotter 42

Page 43: Client / Server Programming in Java

UDP Temp Client – private dataprivate Color bgColor;private TextField portField;private TextField hostField;private TextField tempFField;private TextField tempCField;private TextArea resultField;private DatagramPacket sendPacket, recvPacket;private DatagramSocket sock;

}//end of class

cs423-cotter 43

Page 44: Client / Server Programming in Java

Summary

• Java Client / Server Introduction– Basic processes / classes

• Basic TCPecho Client / Server• Threads in Java• Multi-threaded TCPecho Server• Graphical TCPecho Client

– NetBeans Project

• UDP Temperature Server• Graphical UDP Temperature Client

cs423-cotter 44