Skip to main content

Java Networking: Socket Programming

Java Networking

Java Networking is a concept of connecting two or more computing devices together so that we can share resources.

Java socket programming provides facility to share data between different computing devices.

Advantage of Java Networking

  1. sharing resources
  2. centralize software management

Java Networking Terminology

The widely used java networking terminologies are given below:

  1. IP Address
  2. Protocol
  3. Port Number
  4. MAC Address
  5. Connection-oriented and connection-less protocol
  6. Socket

1) IP Address

IP address is a unique number assigned to a node of a network e.g. 192.168.0.1 . It is composed of octets that range from 0 to 255.

It is a logical address that can be changed.

2) Protocol

A protocol is a set of rules basically that is followed for communication. For example:

  • TCP
  • FTP
  • Telnet
  • SMTP
  • POP etc.

3) Port Number

The port number is used to uniquely identify different applications. It acts as a communication endpoint between applications.

The port number is associated with the IP address for communication between two applications.

4) MAC Address

MAC (Media Access Control) Address is a unique identifier of NIC (Network Interface Controller). A network node can have multiple NIC but each with unique MAC.

5) Connection-oriented and connection-less protocol

In connection-oriented protocol, acknowledgement is sent by the receiver. So it is reliable but slow. The example of connection-oriented protocol is TCP.

But, in connection-less protocol, acknowledgement is not sent by the receiver. So it is not reliable but fast. The example of connection-less protocol is UDP.

6) Socket

A socket is an endpoint between two way communication.

Visit next page for java socket programming.


java.net package

The java.net package provides many classes to deal with networking applications in Java. A list of these classes is given below:

  • Authenticator
  • CacheRequest
  • CacheResponse
  • ContentHandler
  • CookieHandler
  • CookieManager
  • DatagramPacket
  • DatagramSocket
  • DatagramSocketImpl
  • InterfaceAddress
  • JarURLConnection
  • MulticastSocket
  • InetSocketAddress
  • InetAddress
  • Inet4Address
  • Inet6Address
  • IDN
  • HttpURLConnection
  • HttpCookie
  • NetPermission
  • NetworkInterface
  • PasswordAuthentication
  • Proxy
  • ProxySelector
  • ResponseCache
  • SecureCacheResponse
  • ServerSocket
  • Socket
  • SocketAddress
  • SocketImpl
  • SocketPermission
  • StandardSocketOptions
  • URI
  • URL
  • URLClassLoader
  • URLConnection
  • URLDecoder
  • URLEncoder
  • URLStreamHandler

Java Socket Programming

Java Socket programming is used for communication between the applications running on different JRE.

Java Socket programming can be connection-oriented or connection-less.

Socket and ServerSocket classes are used for connection-oriented socket programming and DatagramSocket and DatagramPacket classes are used for connection-less socket programming.

The client in socket programming must know two information:

  1. IP Address of Server, and
  2. Port number.

Here, we are going to make one-way client and server communication. In this application, client sends a message to the server, server reads the message and prints it. Here, two classes are being used: Socket and ServerSocket. The Socket class is used to communicate client and server. Through this class, we can read and write message. The ServerSocket class is used at server-side. The accept() method of ServerSocket class blocks the console until the client is connected. After the successful connection of client, it returns the instance of Socket at server-side.

Socket Programming in Java

Socket class

A socket is simply an endpoint for communications between the machines. The Socket class can be used to create a socket.

Important methods

MethodDescription
1) public InputStream getInputStream()returns the InputStream attached with this socket.
2) public OutputStream getOutputStream()returns the OutputStream attached with this socket.
3) public synchronized void close()closes this socket

ServerSocket class

The ServerSocket class can be used to create a server socket. This object is used to establish communication with the clients.

Important methods

MethodDescription
1) public Socket accept()returns the socket and establish a connection between server and client.
2) public synchronized void close()closes the server socket.

Example of Java Socket Programming

Creating Server:

To create the server application, we need to create the instance of ServerSocket class. Here, we are using 6666 port number for the communication between the client and server. You may also choose any other port number. The accept() method waits for the client. If clients connects with the given port number, it returns an instance of Socket.

  1. ServerSocket ss=new ServerSocket(6666);  
  2. Socket s=ss.accept();//establishes connection and waits for the client   

Creating Client:

To create the client application, we need to create the instance of Socket class. Here, we need to pass the IP address or hostname of the Server and a port number. Here, we are using "localhost" because our server is running on same system.

  1. Socket s=new Socket("localhost",6666);  

Let's see a simple of Java socket programming where client sends a text and server receives and prints it.

File: MyServer.java

  1. import java.io.*;  
  2. import java.net.*;  
  3. public class MyServer {  
  4. public static void main(String[] args){  
  5. try{  
  6. ServerSocket ss=new ServerSocket(6666);  
  7. Socket s=ss.accept();//establishes connection   
  8. DataInputStream dis=new DataInputStream(s.getInputStream());  
  9. String  str=(String)dis.readUTF();  
  10. System.out.println("message= "+str);  
  11. ss.close();  
  12. }catch(Exception e){System.out.println(e);}  
  13. }  
  14. }  

File: MyClient.java

  1. import java.io.*;  
  2. import java.net.*;  
  3. public class MyClient {  
  4. public static void main(String[] args) {  
  5. try{      
  6. Socket s=new Socket("localhost",6666);  
  7. DataOutputStream dout=new DataOutputStream(s.getOutputStream());  
  8. dout.writeUTF("Hello Server");  
  9. dout.flush();  
  10. dout.close();  
  11. s.close();  
  12. }catch(Exception e){System.out.println(e);}  
  13. }  
  14. }  

Example of Java Socket Programming (Read-Write both side)

In this example, client will write first to the server then server will receive and print the text. Then server will write to the client and client will receive and print the text. The step goes on.

File: MyServer.java

  1. import java.net.*;  
  2. import java.io.*;  
  3. class MyServer{  
  4. public static void main(String args[])throws Exception{  
  5. ServerSocket ss=new ServerSocket(3333);  
  6. Socket s=ss.accept();  
  7. DataInputStream din=new DataInputStream(s.getInputStream());  
  8. DataOutputStream dout=new DataOutputStream(s.getOutputStream());  
  9. BufferedReader br=new BufferedReader(new InputStreamReader(System.in));  
  10.   
  11. String str="",str2="";  
  12. while(!str.equals("stop")){  
  13. str=din.readUTF();  
  14. System.out.println("client says: "+str);  
  15. str2=br.readLine();  
  16. dout.writeUTF(str2);  
  17. dout.flush();  
  18. }  
  19. din.close();  
  20. s.close();  
  21. ss.close();  
  22. }}  

File: MyClient.java

  1. import java.net.*;  
  2. import java.io.*;  
  3. class MyClient{  
  4. public static void main(String args[])throws Exception{  
  5. Socket s=new Socket("localhost",3333);  
  6. DataInputStream din=new DataInputStream(s.getInputStream());  
  7. DataOutputStream dout=new DataOutputStream(s.getOutputStream());  
  8. BufferedReader br=new BufferedReader(new InputStreamReader(System.in));  
  9.   
  10. String str="",str2="";  
  11. while(!str.equals("stop")){  
  12. str=br.readLine();  
  13. dout.writeUTF(str);  
  14. dout.flush();  
  15. str2=din.readUTF();  
  16. System.out.println("Server says: "+str2);  
  17. }  
  18.   
  19. dout.close();  
  20. s.close();  
  21. }}  

Anurag Rana

Comments

Popular posts from this blog

JAVA Scrollbar, MenuItem and Menu, PopupMenu

ava AWT Scrollbar The  object  of Scrollbar class is used to add horizontal and vertical scrollbar. Scrollbar is a  GUI  component allows us to see invisible number of rows and columns. AWT Scrollbar class declaration public   class  Scrollbar  extends  Component  implements  Adjustable, Accessible   Java AWT Scrollbar Example import  java.awt.*;   class  ScrollbarExample{   ScrollbarExample(){               Frame f=  new  Frame( "Scrollbar Example" );               Scrollbar s= new  Scrollbar();               s.setBounds( 100 , 100 ,  50 , 100 );               f.add(s);   ...

Difference between net platform and dot net framework...

Difference between net platform and dot net framework... .net platform supports programming languages that are .net compatible. It is the platform using which we can build and develop the applications. .net framework is the engine inside the .net platform which actually compiles and produces the executable code. .net framework contains CLR(Common Language Runtime) and FCL(Framework Class Library) using which it produces the platform independent codes. What is the .NET Framework? The Microsoft .NET Framework is a platform for building, deploying, and running Web Services and applications. It provides a highly productive, standards-based, multi-language environment for integrating existing investments with next-generation applications and services as well as the agility to solve the challenges of deployment and operation of Internet-scale applications. The .NET Framework consists of three main parts: the common language runtime, a hierarchical set of unified class librari...

Standard and Formatted Input / Output in C++

The C++ standard libraries provide an extensive set of input/output capabilities which we will see in subsequent chapters. This chapter will discuss very basic and most common I/O operations required for C++ programming. C++ I/O occurs in streams, which are sequences of bytes. If bytes flow from a device like a keyboard, a disk drive, or a network connection etc. to main memory, this is called   input operation   and if bytes flow from main memory to a device like a display screen, a printer, a disk drive, or a network connection, etc., this is called   output operation . Standard Input and Output in C++ is done through the use of  streams . Streams are generic places to send or receive data. In C++, I/O is done through classes and objects defined in the header file  <iostream> .  iostream  stands for standard input-output stream. This header file contains definitions to objects like  cin ,  cout , etc. /O Library Header Files There are...