Basics of Socket Programming in Java
BASIC SOCKET PROGRAMMING IN JAVA
Client/Server
A server is anything that has some resources that can be shared.
A client is simply any other entity that wants to gain access to a particular server. The interaction between client and server is just like the interaction between a lamp and an electrical socket. The power grid of the house is the server and the lamp is a power client.
What exactly is a socket?
Can say, a network socket is lot like an electrical socket.
The notion of a socket only allows a single computer to serve many different clients at once, as well as serving many different types of information. This is managed by the introduction of a port which is a numbered socket on a particular machine. A server process is said to Γ’listenΓ’ to a port until a client connects to it. A server is allowed to accept multiple clients connected to the same port number, although each session is unique. To manage multiple client connections, a server process must be multithreaded or must have some other means of multiplexing simultaneous I/O.
For more information about it check the following link. It is very informative for those who are interested in this topic. π
#-Link-Snipped-#
TCP/IP Client Sockets
These ae used to implement reliable,bidirectional, persistent, point-to-point stream based connections between hosts on the Internet. A Socket can be used to connect Java's I/O system to other programs that may reside either on the local or any other machine on the internet.
There are two kind of TCP/IP sockets in Java
1. For Servers- ServerSocket
ServerSocket class is designed to be a "listener" whcih wait for clients to connect before doing anything. This class is used to create servers that listen for either local or remote client programs to connect to them on published ports.
Constructors of this class:
a) ServerSocket( int port)
Creates server socket on the specified port with a queue length of 50.
b) ServerSocket(int port,int maxQueue)
Create a server socket on the specified port with a maximum queue length of maxQueue
c) ServerSocket(int port, int maxQueue, InetAddress localAddress)
Create a server socket on the specified port with a maximum queue length of maxQueue .On a multihomes host, localAddress specifies the IP address to which this socket binds.
All constructors above reflect the port number that we want to accept connections on and optionally how long we want the queue for said port to be.
ServerSocket has a method called as accept() which is a blocking call that will wait for a client to intiate communications and the return the normal Socket that is then used for communication with the client.
2. for Clients - Socket
The Socket class is designed to connect server sockets and initiate protocol exchanges.
The Socket object establishes a connection between the client and server. There are two constructors that can be used to create client sockets.
a) Socket(String hostName, int port)
Creates a socket connecting the local host to the named host and port
b) Socket(InetAddress ipAddress, int port)
Creates a port using a preexisting InetAddress object and a port
Few more things related to the Socket
a) InetAddress getInetAddress()->Returns the InetAddress associated with the Socket object .
b) int getPort()->Returns the remote port to which the invoking Socket object is connected.
c) int getLocalPort() -> Returns the local port to which the invoking Socket object is connected.
d) nputStream geInputStream() -> Returns the InputStream associated with the invoking socket.
e) OutputStream geOutputStream() -> Returns the OutputStream associated with the invoking socket.
Source: Complete Reference -by Herbert Schildt
Programming part is yet to come. Please wait. π
Hope the given link will clear all your doubts about this topic. If still any Please feel free to ask and add more information here if you have anything to share here.π
Client/Server
A server is anything that has some resources that can be shared.
A client is simply any other entity that wants to gain access to a particular server. The interaction between client and server is just like the interaction between a lamp and an electrical socket. The power grid of the house is the server and the lamp is a power client.
What exactly is a socket?
Can say, a network socket is lot like an electrical socket.
The notion of a socket only allows a single computer to serve many different clients at once, as well as serving many different types of information. This is managed by the introduction of a port which is a numbered socket on a particular machine. A server process is said to Γ’listenΓ’ to a port until a client connects to it. A server is allowed to accept multiple clients connected to the same port number, although each session is unique. To manage multiple client connections, a server process must be multithreaded or must have some other means of multiplexing simultaneous I/O.
For more information about it check the following link. It is very informative for those who are interested in this topic. π
#-Link-Snipped-#
TCP/IP Client Sockets
These ae used to implement reliable,bidirectional, persistent, point-to-point stream based connections between hosts on the Internet. A Socket can be used to connect Java's I/O system to other programs that may reside either on the local or any other machine on the internet.
There are two kind of TCP/IP sockets in Java
1. For Servers- ServerSocket
ServerSocket class is designed to be a "listener" whcih wait for clients to connect before doing anything. This class is used to create servers that listen for either local or remote client programs to connect to them on published ports.
Constructors of this class:
a) ServerSocket( int port)
Creates server socket on the specified port with a queue length of 50.
b) ServerSocket(int port,int maxQueue)
Create a server socket on the specified port with a maximum queue length of maxQueue
c) ServerSocket(int port, int maxQueue, InetAddress localAddress)
Create a server socket on the specified port with a maximum queue length of maxQueue .On a multihomes host, localAddress specifies the IP address to which this socket binds.
All constructors above reflect the port number that we want to accept connections on and optionally how long we want the queue for said port to be.
ServerSocket has a method called as accept() which is a blocking call that will wait for a client to intiate communications and the return the normal Socket that is then used for communication with the client.
2. for Clients - Socket
The Socket class is designed to connect server sockets and initiate protocol exchanges.
The Socket object establishes a connection between the client and server. There are two constructors that can be used to create client sockets.
a) Socket(String hostName, int port)
Creates a socket connecting the local host to the named host and port
b) Socket(InetAddress ipAddress, int port)
Creates a port using a preexisting InetAddress object and a port
Few more things related to the Socket
a) InetAddress getInetAddress()->Returns the InetAddress associated with the Socket object .
b) int getPort()->Returns the remote port to which the invoking Socket object is connected.
c) int getLocalPort() -> Returns the local port to which the invoking Socket object is connected.
d) nputStream geInputStream() -> Returns the InputStream associated with the invoking socket.
e) OutputStream geOutputStream() -> Returns the OutputStream associated with the invoking socket.
Source: Complete Reference -by Herbert Schildt
Programming part is yet to come. Please wait. π
Hope the given link will clear all your doubts about this topic. If still any Please feel free to ask and add more information here if you have anything to share here.π
Replies
-
durga chnice one Shalini.. π
-
ms_csWhy dont you proceed further? In java number of features are available. SocketProgramming is one of the important one...
-
shalini_goel14
Please wait ms_cs, I will do so soon. Just the things are not working fine on my side. πms_csWhy dont you proceed further? In java number of features are available. SocketProgramming is one of the important one... -
Yamini L
Mam, i have also learned about Socket Programming in my last sem..I have a simple UDP chat program(Client and Server Communication)..I thought i can share it with you all..Here is my code..shalini_goel14Programming part is yet to come. Please wait. π
Hope the given link will clear all your doubts about this topic. If still any Please feel free to ask and add more information here if you have anything to share here.π
CLIENT
[FONT=Sylfaen][FONT=Verdana]/*client.java*/[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]import java.io.*;[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]import java.net.*;[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]class client[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]{[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]public static void main(String args[])[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]{[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]String data;[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]try[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]{[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]DatagramSocket s=new DatagramSocket();[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]do[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]{[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]System.out.println("Enter the data");[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]DataInputStream dis=new DataInputStream(System.in);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]InetAddress ip=InetAddress.getByName("");[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]byte[] senddata=new byte[1024];[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]byte[] receivedata=new byte[1024];[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]data=dis.readLine();[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]senddata=data.getBytes();[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]DatagramPacket sp=new DatagramPacket(senddata,senddata.length,ip,8050);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]s.send(sp);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]DatagramPacket rp=new DatagramPacket(receivedata,receivedata.length);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]s.receive(rp);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]String msg=new String(rp.getData());[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]System.out.println("From Server:"+msg);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]}[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]while(!data.equalsIgnoreCase("end"));[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]s.close();[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]}[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]catch(Exception e){}[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]}}[/FONT][/FONT]
SERVER
[B][FONT=Sylfaen][FONT=Verdana]/*server.java*/[/FONT][/FONT][/B] [FONT=Sylfaen][FONT=Verdana]import java.io.*;[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]import java.net.*;[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]class server[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]{[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]public static void main(String args[])[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]{[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]try[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]{[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]DatagramSocket s=new DatagramSocket(8050);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]byte[] rd=new byte[1024];[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]byte[] sd=new byte[1024];[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]String sent;[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]do[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]{[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]DatagramPacket rp=new DatagramPacket(rd,rd.length);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]s.receive(rp);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]String data=new String(rp.getData());[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]System.out.println("Received from client:"+data);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]InetAddress ip=rp.getAddress();[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]System.out.println("Address:"+ip);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]int port=rp.getPort();[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]System.out.println("Port:"+port);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]System.out.println("Enter the data to send");[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]DataInputStream dis=new DataInputStream(System.in);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]sent=dis.readLine();[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]sd=sent.getBytes();[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]DatagramPacket sp=new DatagramPacket(sd,sd.length,ip,port);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]s.send(sp);[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]}[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]while(!sent.equalsIgnoreCase("end"));[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]s.close();[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]}catch(IOException e){}[/FONT][/FONT] [FONT=Sylfaen][FONT=Verdana]}}[/FONT][/FONT]
OUTPUT
C:\jdk1.6.0_06\bin>javac server.java
C:\jdk1.6.0_06\bin>java server
Received from client: hi
Address:/127.0.0.1
Port: 1541
Enter the data to send
hello
Received from client: How are you?
Address:/127.0.0.1
Port: 1541
Enter the data to send
Fine
C:\jdk1.6.0_06\bin>javac client.java
C:\jdk1.6.0_06\bin>java client
Enter the data
hi
From Server: hello
Enter the data
How are you?
From Server: Fine
Enter the data
end -
shalini_goel14Hey Well done miniy! I am becoming your fan man. π π
ok so you have given UDP sockets program, just wait for my TCP Sockets program.
PS: Just now I repaired few problems in my netbeans. I wish it will work within an hour. π -
Yamini L
Mam,just wanted to tell you that i am a girl..πI wil aslo try to post my TCP Socket Program....shalini_goel14Hey Well done miniy! I am becoming your fan man. π π -
shalini_goel14
ok miniy, I am sorry for that "man" πminiyMam,just wanted to tell you that i am a girl..πI wil aslo try to post my TCP Socket Program....
Well I will wait for your TCP Socket Program. One more thing I would like to add, it would look better if you can show the output in command prompt and include them as images here. Good you have made my work easier. π -
Yamini LYeah sure..I will do what you said mam..Thanks for the good words....:smile:
-
babloo0311Hello shalini, thanks you have done a good job
-
Yamini LWell,here is a very small TCP socket program(Client Server Communication)..In this program,just a message is sent from client side to server and vice versa..Classes for creating sockets do vary with TCP and UDP(we use ServerSocket class and Socket class in TCP whereas in UDP we use DatagramSocket class)..
CLIENT
import java.io.*; import java.net.*; class clientt { public static void main(String args[]) throws SocketException,IOException { Socket s=new Socket("localhost",8080); PrintStream ps=new PrintStream(s.getOutputStream()); ps.println("Hello from client side"); DataInputStream dis=new DataInputStream(s.getInputStream()); System.out.println(dis.readLine()); ps.close(); } }
SERVER
import java.io.*; import java.net.*; class servert { public static void main(String args[])throws SocketException,IOException { ServerSocket ss=new ServerSocket(8080); Socket s=ss.accept(); DataInputStream dis=new DataInputStream(s.getInputStream()); System.out.println(dis.readLine()); PrintStream ps=new PrintStream(s.getOutputStream()); ps.println("Hello from server side"); ps.close(); } }
OUTPUT
SERVER
E:\yamini>javac servert.java
Note: servert.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
E:\yamini>java servert
Hello from client side
E:\yamini>
CLIENT
E:\yamini>javac clientt.java
Note: clientt.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
E:\yamini>java clientt
Hello from server side
E:\yamini>
@Shalini:Mam, I tried to give the output as command prompt images..But after inserting the image,i am unable to view it in the postπ²..I will try to fix it soon and get it in the format u have mentioned:smile:.. -
shalini_goel14Good miniy π
What about s.close(); statement. I guess closing socket is also required in the code.
One more task for you-Can you find some time to explain your programs here so that rest of the CEans here can get benefitted. π
PS: @Yamini Would you like to work for any of CE projects ? π -
Saandeep SreerambatlaHey shalini and Miniy can you please tell me what are the pre- requisites to learn this socket programming?
Since i dont want to post silly questions , its better if we have some pre - requisites also included such that i can come back and then post my questions here.
π -
Yamini L
Yeah,I will try to find some time to explain those 2 programs:smile:..shalini_goel14One more task for you-Can you find some time to explain your programs here so that rest of the CEans here can get benefitted. π
PS: @Yamini Would you like to work for any of CE projects ? π
Mam,I would like to work for CE projects(but i require guidance from you all)..As of now,I have my project reviews and university exams approaching(march and april)..Hence,I am not sure whether i will be able to spend more time on CE like now..ππ(bit confused).. -
shalini_goel14
According to me prerequisite to read what I typed is you know basic English and know how to search on google for terms that you don't understand and even then not satisfied ask here. For me no question is silly. You can ask any question. This will give us idea to tell you better whether you are interested in this topic in or just showing off. Your queries will be answered according to your knowledge level and interest in the topic. okEnglish-ScaredSince i dont want to post silly questions
Sure miniy, no issues. First complete your final year. πminiyYeah,I will try to find some time to explain those 2 programs:smile:..
Mam,I would like to work for CE projects(but i require guidance from you all)..As of now,I have my project reviews and university exams approaching(march and april)..Hence,I am not sure whether i will be able to spend more time on CE like now..ππ(bit confused).. -
Yamini L@Shalini: Mam, I have just tried to explain that UDP chat program..I have also mentioned here about the classes that are used for udp..:smile:Hope this would help others..
Socket Programming
Socket as you all know,is a connection between two hosts.A Socket can perform following operations
vConnect to a remote machine
vSend data
vReceive Data
vClose a machine
vBind to port
vListening for informing data
vAccept connections from remote machines on bound port
Life Cycle of a Socket
vA new Socket is created with help of Socket constructor
vA connection to remote host is tried by Socket
vAfter connection establishment both local and remote hosts can exchange information.
vWhen transmission is complete,one or both sides can close the connection.
The main difference between User Datagram Protocol(UDP) and Transmission Control Protocol(TCP) is that UDP provides a connectionless,unrealibe service(ensures quick delivery) whereas TCP provides a Connection Oriented,Reliable(flow control,error control)service..
JAVAβs implementation of UDP is split into 2 classes
vDatagramPacket β to stuff bytes of data into UDP packets called datagram and to unstuff received datagrams.
vDatagramSocket- to send as well as to receive UDP datagrams.
DatagramPacket class
Constructors for receiving Datagrams
vPublic DatagramPacket(byte[] buffer,int length)
vPublic DatagramPacket(byte[]buffer,int offset,int length)
Constructors for sending Datagrams
vPublic DatagramPacket(byte[]data,int length,InetAddress destination,int port)
vPublic DatagramPacket(byte[]data,int offset,InetAddress destination,int port)
Five methods are used to retrieve different parts of a Datagram namely.
ΓgetAddress() {Returns InetAddress object or address of machine}
ΓgePort() { returns an integer specifying port number}
ΓgetData() {Returns a byte array containing data from datagream}
ΓgetLength() {Returns number of bytes in datagram)
ΓgetOffset() {Returns point in the array returned by getData() where the data from datagram begins}
We have also got following set methods such as setData(),setAddress(),setPort() and setLength() used for various purposes.
DatagramSocket class
All Datagram Sockets are bound to a local port on which they listen for incoming data ..
Constructors for DatagramSocket class
ΓPublic DatagramSocket() throws SocketException
ΓPublic DatagramSocket(int port)throws SocketException
ΓPublic DatagramSocket(int port,InetAddress address)
We have 4 methods in this class..
Send()
Public void send(DatagramPacket dp)throws IOException
Used for sending datagrams
Receive()
Public void receive(DatagramPacket dp)throws IOException
Used for receiving Datagrams
Close()
Public void close()
Frees the port occupied by socket
getLocalPort()
public void getLocalPort()
returns the local port number on which the socket is listening
These are the 2 main classes(DatagramPacket and DatagramSocket) as far as UDP is concerned..
Explanation of UDP chat program
Client
vA DatagramSocket is first created.
vA DataInputStream object is created and using that data entered by the user is obtained
vInetAddress is obtained using getByName() method
vData obtained from InputStream need to be converted into bytes before transmission and this is made possible through getBytes() method.
vNow a new DatagramPacket is created is to stuff all the bytes into it and to send it to the server(done using send() function)
vOne more DatagramPacket is created just to receive the bytes of data from server (using receive() function)
vgetData() method gets the data from the bytes received and that is displayed on the console(converted to stream)..
vFinally socket is closed.(using close())
Server
vSame process occurs at server side(socket creation,DatagramPacket creation,receiving data from client side,sending data to client and so on)..Various get methods are used in the program (getPort(),getAddress(),getData())just to retrieve data sent by the client..
vThen DatagramPacket is created in server side and is sent to the client..(after stuffing bytes of data)
vFinally,Socket is closed..
vThis way Client and Server communication occurs using UDP.. -
Saandeep Sreerambatlashalini_goel14According to me prerequisite to read what I typed is you know basic English and know how to search on google for terms that you don't understand and even then not satisfied ask here. For me no question is silly. You can ask any question. This will give us idea to tell you better whether you are interested in this topic in or just showing off. Your queries will be answered according to your knowledge level and interest in the topic. ok
Shalini : I asked the pre- requisites for every one of the forum interested in this one.
i can ask silly questions and you can answer them , but what if many people ask all minor questions which they can get through one single reading of a book or material or topic which you would suggest?
and me i will ask questions ..ππ -
shalini_goel14@Scared You need not to think of others. Others can ask questions here if have any. Well, I am waiting for your questions.
@Others You can ask any questions(Starting from S of Socket Programming π ). OK π -
komputergeek@shalini : I would like to know how to do audio streaming using socket programming.
-
shalini_goel14
Good question komputergeek, Please put some more light on what exactly is "audio streaming" πkomputergeek@shalini : I would like to know how to do audio streaming using socket programming.
You are reading an archived discussion.
Related Posts
hi all...
i want to ask about how connect flash mamory USB in mobile and use as momory in mobileπ
Hi all,
I am working on a project where im making a robotis hand. The absic structure, skin and servo motors are all set up. But I am having trouble...
India's second biggest tech fest by IIT Roorkee: Cognizance.
Official Website: Cognizance 2009::Second Biggest Techfest in India. IIT Roorkee
About Cognizance:
The Indian Institute of Technology, Roorkee is proud to...
Here's information about Dallas TechFest -
Official Website: Dallas TechFest 2009 > Home
Dallas TechFest 2009 is a full day of technology learning, not just on one technology but on...
CEans,
Can any write a review of Tyler Perry's Madea Goes to Jail? π
Looking forward to your reviews.