220 likes | 236 Views
Learn about Java network programming, representing IP addresses, creating sockets, connecting to servers, and handling TCP and UDP protocols.
E N D
Referring to Java API Specifications http://java.sun.com/j2se/1.4.1/docs/api
Representing IP addressInetAddress public static InetAddressgetByName(String host) InerAddress a = InetAddress.getByName(“compserv1.cs.sunysb.edu”); InerAddress a = InetAddress.getByName(“localhost”);
TCP Sockets Server Client accept() ServerSocket Socket
Sockets Server Client ServerSocket Socket connect()
Sockets Server Client ServerSocket connect() Socket Socket
Sockets Server Client accept() ServerSocket Socket Socket
Socket • public Socket() • Creates an unconnected socket. • public Socket(String host, int port) • Creates a stream (TCP) socket and connects it to the specified port number on the named host.
Socket… • void bind(SocketAddress bindpoint) Binds the socket to a local address. • void close() Closes this socket. • void connect(SocketAddress endpoint) Connects this socket to the server. • void connect(SocketAddress endpoint, int timeout) Connects this socket to the server with a timeout.
ServerSocket • ServerSocket() Creates an unbound server socket. • ServerSocket(int port) Creates a server socket, bound to the port. • ServerSocket(int port, int backlog) Creates a server socket and binds it to the local port number, with the backlog. • ServerSocket(int port, int backlog, InetAddress bindAddr) Create a server with the port, listen backlog, and local IP address to bind to.
ServerSocket… • Socketaccept() Listens for a connection and accepts it. • void bind(SocketAddress endpoint) Binds to an address. • void bind(SocketAddress endpoint, int backlog) Binds to an address with backlog limit. • void close() Closes this socket.
import java.io.*; import java.net.*; public class EchoServer { public static final int PORT = 8080; public static void main(String[] args) throws IOException { ServerSocket listen_sock = newServerSocket(PORT); try { // Block until a connection occurs: Socket socket = listen_sock.accept(); try { // Connection accepted: BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream()) );
// Output is automatically flushed by PrintWriter: PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter( socket.getOutputStream()) ) , true); // echo back and forth while (true) { String str = in.readLine(); if (str.equals("END")) break; out.println(str); } } finally { System.out.println("closing..."); socket.close(); } } finally { listen_sock.close(); } }
import java.net.*; import java.io.*; public class EchoClient { public static void main(String[] args) throws IOException { InetAddress addr = InetAddress.getByName(“localhost”); // Create a socket and connect to remote server Socket socket = newSocket(addr, EchoServer.PORT); try { // Get the input stream BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream()));
// Get the output stream PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter( socket.getOutputStream()) ), true); for(int i = 0; i < 10; i ++) { out.println(“Hello " + i); String str = in.readLine(); System.out.println(str); } out.println("END"); } finally {socket.close(); } }
DatagramSocket • DatagramSocket() • Constructs a datagram socket and binds it to any available port. • DatagramSocket(int port) • Constructs a datagram socket and binds it to the specified port. • DatagramSocket(int port, InetAddress laddr) • Creates a datagram socket, bound to the specified local address. • DatagramSocket(SocketAddress bindaddr) • Creates a datagram socket, bound to the specified local address.
DatagramPacket • DatagramPacket(byte[] buf, int length) • Constructs a DatagramPacket for receiving packets. • DatagramPacket(byte[] buf, int length, InetAddress address, int port) • Constructs a datagram packet for sending packets to the specified address and port.
// buffer to receive data byte[] buf = new byte[1000]; // buffer // create packet for receiving DatagramPacket recv_dp = new DatagramPacket(buf, buf.length); // create socket for sending DatagramSocket socket; try { socket = new DatagramSocket(INPORT); while(true) { // Block until a datagram appears: socket.receive(recv_dp); // Extract the string received String str = new String(recv_dp.getData(), 0, recv_dp.getLength());
//Construct the datagram to send DatagramPacket echo = new DatagramPacket( str.getBytes(0, str.length(), buf, 0), str.length, recv_dp.getAddress(), recv_dp.getPort()); // send it back socket.send(echo); } } catch(SocketException e) { System.err.println("Can't open socket"); System.exit(1); } catch(IOException e) { System.err.println("Communication error"); System.exit(1); }