Click here to Skip to main content
15,893,190 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
Hai...I tried simple bidirectional client server communication.But i cant able to perform bidirectional.Only i have able to receive text file from client to server.In case of bidirectional communication i need to send back the same file as response to the client.Anyone can please help me
Posted
Comments
Suvendu Shekhar Giri 30-Jun-15 8:30am    
Please share what you have tried so far so that we will be able to findout the issue.
saranyaayyappan 30-Jun-15 9:06am    
I am performing simple bidirectional client server communication.Here i am open the socket and send text file from client to server.this was performed well but when i am send back the same file as response from server to client at the same port..not working
saranyaayyappan 1-Jul-15 1:05am    
Hai

Please check the below code and let me know your suggestions.Here i am only able to perform one way communication..not get the same file as response from server..

Thanks in advance


Server code:

Hide Expand Copy Code


import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server
{

private static Socket socket;
static int current=0;
public final static String FILE_TO_RECEIVED = "/home/sosdt010/Desktop/Testfile/text1.txt";
public final static int FILE_SIZE = 4939993 ;
public static void main(String[] args)
{
try
{

int port = 6777;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server Started and listening to the port 6777");

//Server is running always. This is done using this while(true) loop

while(true)
{
//Reading the message from the client

socket = serverSocket.accept();
InputStream is = socket.getInputStream();
FileOutputStream fos=new FileOutputStream(FILE_TO_RECEIVED );
BufferedOutputStream bos=new BufferedOutputStream(fos);
byte [] mybytearray = new byte [FILE_SIZE];
int bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
do {
bytesRead =
is.read(mybytearray, current, (mybytearray.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead > -1);

bos.write(mybytearray, 0 , current);
//bos.close();

System.out.println("Message received from client is "+current);

//Sending the response back to the client.
OutputStream out = socket.getOutputStream();
File myFile=new File( FILE_TO_RECEIVED);
FileInputStream fis=new FileInputStream(myFile);
byte [] mybytearray1 = new byte [(int)myFile.length()];

int len ;
while ((len = fis.read(mybytearray1)) >= 0) {
out.write(len);
System.out.println("Message sent to the client is "+ current);
out.flush();
//fis.close();

}

}}
catch (Exception e)
{
e.printStackTrace();

}
finally
{
try
{
socket.close();

}
catch(Exception e){
e.printStackTrace();
}
}
}

}



Client Code:

Hide Expand Copy Code


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;

public class Client
{
public final static String FILE_TO_SEND = "/home/sosdt010/Desktop/doc/character.txt";
private static Socket socket;
public final static String FILE_TO_RECEIVED = "/home/sosdt010/Desktop/Testfile/text2.txt";
public final static int FILE_SIZE = 4939993 ;
static int current=0;
public static void main(String args[])
{
try
{
String host = "10.170.0.38";
int port = 6777;
InetAddress address = InetAddress.getByName(host);
socket = new Socket(address, port);

//Send the message to the server
OutputStream out = socket.getOutputStream();
saranyaayyappan 1-Jul-15 1:06am    
Please give me a solution...

1 solution

Hai

Please check the below code and let me know your suggestions.Here i am only able to perform one way communication..not get the same file as response from server..

Thanks in advance

Server code:

Java
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server
{
 
 private static Socket socket;
 static int current=0;
 public final static String FILE_TO_RECEIVED = "/home/sosdt010/Desktop/Testfile/text1.txt";
 public final static int FILE_SIZE = 4939993 ;
    public static void main(String[] args)
    {
        try
        {
 
            int port = 6777;
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Server Started and listening to the port 6777");
 
            //Server is running always. This is done using this while(true) loop
            
             while(true)
            {
                //Reading the message from the client
                
                 socket = serverSocket.accept();
                 InputStream is = socket.getInputStream();
                 FileOutputStream fos=new FileOutputStream(FILE_TO_RECEIVED );
                 BufferedOutputStream bos=new BufferedOutputStream(fos);
                 byte [] mybytearray  = new byte [FILE_SIZE];
                 int bytesRead = is.read(mybytearray,0,mybytearray.length);
       	         current = bytesRead;
                 do {
        	         bytesRead =
        	            is.read(mybytearray, current, (mybytearray.length-current));
        	         if(bytesRead >= 0) current += bytesRead;
        	      } while(bytesRead > -1);

        	      bos.write(mybytearray, 0 , current);
        	      //bos.close();
        	     
               System.out.println("Message received from client is "+current);
             
 
                //Sending the response back to the client.
               OutputStream  out = socket.getOutputStream();
               File myFile=new File( FILE_TO_RECEIVED);
               FileInputStream fis=new FileInputStream(myFile);
               byte [] mybytearray1  = new byte [(int)myFile.length()];
              
             
               int len ;
	            while ((len = fis.read(mybytearray1)) >= 0) {
	            	out.write(len);
	            	System.out.println("Message sent to the client is "+ current);
	            	out.flush();
	          	    //fis.close();
	          	   
         	    
         }
            
        }}
        catch (Exception e)
        {
            e.printStackTrace();
            
        }
        finally
        {
            try
            { 
            	socket.close();
                
               }
            catch(Exception e){
            	e.printStackTrace();
            }
        }
    }
	
}


Client Code:

Java
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
 
public class Client
{
    public final static String FILE_TO_SEND = "/home/sosdt010/Desktop/doc/character.txt";
    private static Socket socket;
    public final static String FILE_TO_RECEIVED = "/home/sosdt010/Desktop/Testfile/text2.txt";
    public final static int FILE_SIZE = 4939993 ;
    static int current=0;
    public static void main(String args[])
    {
        try
        {
            String host = "10.170.0.38";
            int port = 6777;
            InetAddress address = InetAddress.getByName(host);
            socket = new Socket(address, port);
 
            //Send the message to the server
            OutputStream  out = socket.getOutputStream();
            File myFile=new File( FILE_TO_SEND);
            FileInputStream fis=new FileInputStream(myFile);
            BufferedInputStream bis=new BufferedInputStream(fis);
            byte [] mybytearray1  = new byte [(int)myFile.length()];
          
            int len ;
	            while ((len = fis.read(mybytearray1)) >= 0) {
      	  	 out.write(mybytearray1,0,len);
      	  	//out.close();
      	    out.flush();
      	    //fis.close();
      	    //bis.close();
      	   
      	    System.out.println("Message sent to the server is "+ len);
      
      	 
        }
            
  
            //Get the return message from the server
	            InputStream is = socket.getInputStream();
                FileOutputStream fos=new FileOutputStream(FILE_TO_RECEIVED );
                BufferedOutputStream bos=new BufferedOutputStream(fos);
                byte [] mybytearray  = new byte [FILE_SIZE];
                int bytesRead = is.read(mybytearray,0,mybytearray.length);
      	      current = bytesRead;
                do {
       	         bytesRead =
       	            is.read(mybytearray, current, (mybytearray.length-current));
       	         if(bytesRead >= 0) current += bytesRead;
       	      } while(bytesRead > -1);

       	      bos.write(mybytearray, 0 , current);
       	      //bos.close();
              System.out.println("Message received from server is "+current);
            
          
        }
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
        finally
        {
            //Closing the socket
            try
            {
                socket.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
	
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900