Programa de conversação do servidor cliente Java

Tenho um código da internet para um cliente e servidor comunicarem em java. Modifiquei-o um pouco, para que o servidor e o cliente possam conversar um com o outro.

inicialmente o meu cliente envia uma mensagem para o servidor, depois servidor para cliente, depois cliente para servidor e continua...(um não pode enviar mais do que uma mensagem continuamente para o outro). Para isso, há um código básico colocado no ciclo while de modo que a conversa vai de 1 para 1. Mas como eu pus o laço while, a mensagem do servidor não é recebido pelo cliente. Se não houver nenhum laço while (que eu comentei no código aqui), então primeiro a mensagem é enviada pelo cliente para o servidor e, em seguida, servidor para o cliente e o programa pára.

Por favor, ajuda-me a fazer a conversa ir sem parar.

//SERVER
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    private static Socket socket;

    public static void main(String[] args)
    {
        try
        {
            int port = 25000;
            ServerSocket serverSocket = new ServerSocket(port);
            socket = serverSocket.accept();
            System.out.println("Server Started and listening to the port 25000");
            //while(true){
                //Server is running always. This is done using this while(true) loop
                //Reading the message from the client

                InputStream is = socket.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String number = br.readLine();
                System.out.println("Received from client: "+number+"\n");

                BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
                String s = bufferRead.readLine();

                //Sending the response back to the client.
                OutputStream os = socket.getOutputStream();
                OutputStreamWriter osw = new OutputStreamWriter(os);
                BufferedWriter bw = new BufferedWriter(osw);
                bw.write(s);
                bw.flush();
                System.out.println("Sent (to " + socket + ") client: "+s+"\n");

                //String abc = bufferRead.readLine();
                //System.out.println("SAA");
            //}
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                socket.close();
            }
            catch(Exception e){}
        }
    }
}


//CLIENT
import java.io.BufferedReader;
import java.io.BufferedWriter;
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 {

    private static Socket socket;

    public static void main(String args[])
    {   
        try
        {
            String host = "localhost";
            int port = 25000;
            InetAddress address = InetAddress.getByName(host);
            socket = new Socket(address, port);

            //while(true){
                //Send the message to the server
                OutputStream os = socket.getOutputStream();
                OutputStreamWriter osw = new OutputStreamWriter(os);
                BufferedWriter bw = new BufferedWriter(osw);

                BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
                String s = bufferRead.readLine();

                String sendMessage = s + "\n";
                bw.write(sendMessage);
                bw.flush();
                System.out.println("Sent to server: " +sendMessage+"\n");

                //Get the return message from the server
                InputStream is = socket.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                System.out.println(socket);
                String message = br.readLine();
                System.out.println("Received from server: "+message+"\n");
            //}
        }
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
        finally
        {
            //Closing the socket
            try
            {
                socket.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
}
Author: J0e3gan, 2014-03-28

4 answers

Server.java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;

public class Server implements Runnable {

ServerSocket serversocket;
BufferedReader br1, br2;
PrintWriter pr1;
Socket socket;
Thread t1, t2;
String in="",out="";

public Server() {
    try {
        t1 = new Thread(this);
        t2 = new Thread(this);
        serversocket = new ServerSocket(5000);
        System.out.println("Server is waiting. . . . ");
        socket = serversocket.accept();
        System.out.println("Client connected with Ip " +        socket.getInetAddress().getHostAddress());
        t1.start();;
        t2.start();

    } catch (Exception e) {
    }
 }

 public void run() {
    try {
        if (Thread.currentThread() == t1) {
            do {
                br1 = new BufferedReader(new InputStreamReader(System.in));
                pr1 = new PrintWriter(socket.getOutputStream(), true);
                in = br1.readLine();
                pr1.println(in);
            } while (!in.equals("END"));
        } else {
            do {
                br2 = new BufferedReader(new   InputStreamReader(socket.getInputStream()));
                out = br2.readLine();
                System.out.println("Client says : : : " + out);
            } while (!out.equals("END"));
        }
    } catch (Exception e) {
    }
}

public static void main(String[] args) {
    new Server();
}
}

Client.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;

public class Client implements Runnable {

BufferedReader br1, br2;
PrintWriter pr1;
Socket socket;
Thread t1, t2;
String in = "", out = "";

public Client() {
    try {
        t1 = new Thread(this);
        t2 = new Thread(this);
        socket = new Socket("localhost", 5000);
        t1.start();;
        t2.start();

    } catch (Exception e) {
    }
}

public void run() {

    try {
        if (Thread.currentThread() == t2) {
            do {
                br1 = new BufferedReader(new InputStreamReader(System.in));
                pr1 = new PrintWriter(socket.getOutputStream(), true);
                in = br1.readLine();
                pr1.println(in);
            } while (!in.equals("END"));
        } else {
            do {
                br2 = new BufferedReader(new   InputStreamReader(socket.getInputStream()));
                out = br2.readLine();
                System.out.println("Server says : : : " + out);
            } while (!out.equals("END"));
        }
    } catch (Exception e) {
    }

 }

 public static void main(String[] args) {
     new Client();
 }
 }
 3
Author: Don Chakkappan, 2014-03-28 17:44:38

Primeiro você tem que salvar este código na unidade C do seu computador, em seguida, abrir duas janelas de comando prompt. Depois tens de escrever "clientes javac".java "na janela de clientes e" javac server.java "na janela do servidor , depois de pressionar o botão enter escreva "clientes java" e "servidor java" e desfrute de conversação.

    //server.java
import java.io.*;
import java.net.*;
public class server {
   public static void main(String []V){
	   try{
		   ServerSocket ss = new ServerSocket(1201);
		   Socket s = ss.accept();
		   
		   DataInputStream Din = new DataInputStream(s.getInputStream());
		   DataOutputStream Dout = new DataOutputStream(s.getOutputStream());
		   
		   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		   
		   String MsgIn="",MsgOut="";
		   
		   while(!MsgIn.equals("end")){
			   MsgIn = Din.readUTF();
			   System.out.println(MsgIn);
			   MsgOut = br.readLine();
			   Dout.writeUTF(MsgOut);
			   Dout.flush();
		   }
		   s.close();	   
	   }catch(Exception e){
	   
	   }
   
}
}
//clients.java
import java.io.*;

import java.net.*;

import javax.xml.crypto.Data;
public class clients {
     public static void main(String []S){
    	 try{
    		 Socket s = new Socket("192.168.0.103",1201);//my pc's ip
    		 //Socket s = new Socket("192.168.0.100",1201);
    		 DataInputStream Din = new DataInputStream(s.getInputStream());
    		 DataOutputStream Dout = new DataOutputStream(s.getOutputStream());
    		 
    		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		 String MsgIn="",MsgOut="";
    		 
    		 while(!MsgIn.equals("end")){
    			 MsgOut = br.readLine();
    			 Dout.writeUTF(MsgOut);
    			 MsgIn = Din.readUTF();
    			 System.out.println(MsgIn);
    		 }
    	 }catch(Exception e){
    		 
    	 }
     }
     
}
 0
Author: Samiul Islam Sami, 2015-05-17 07:54:34

    //server.java
import java.io.*;
import java.net.*;
public class server {
   public static void main(String []V){
	   try{
		   ServerSocket ss = new ServerSocket(1201);
		   Socket s = ss.accept();
		   
		   DataInputStream Din = new DataInputStream(s.getInputStream());
		   DataOutputStream Dout = new DataOutputStream(s.getOutputStream());
		   
		   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		   
		   String MsgIn="",MsgOut="";
		   
		   while(!MsgIn.equals("end")){
			   MsgIn = Din.readUTF();
			   System.out.println(MsgIn);
			   MsgOut = br.readLine();
			   Dout.writeUTF(MsgOut);
			   Dout.flush();
		   }
		   s.close();	   
	   }catch(Exception e){
	   
	   }
   
}
}
//clients.java
import java.io.*;

import java.net.*;

import javax.xml.crypto.Data;
public class clients {
     public static void main(String []S){
    	 try{
    		 Socket s = new Socket("192.168.0.103",1201);//my pc's ip
    		 //Socket s = new Socket("192.168.0.100",1201);
    		 DataInputStream Din = new DataInputStream(s.getInputStream());
    		 DataOutputStream Dout = new DataOutputStream(s.getOutputStream());
    		 
    		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		 String MsgIn="",MsgOut="";
    		 
    		 while(!MsgIn.equals("end")){
    			 MsgOut = br.readLine();
    			 Dout.writeUTF(MsgOut);
    			 MsgIn = Din.readUTF();
    			 System.out.println(MsgIn);
    		 }
    	 }catch(Exception e){
    		 
    	 }
     }
     
}
 0
Author: shivshankar, 2016-07-21 05:43:32
import java.io.*;
import java.net.*;

class serversvi1
{
    public static void main(String svi[])throws IOException
    {
        try
        {
            ServerSocket servsock=new ServerSocket(5510);
            DataInputStream dis=new DataInputStream(System.in);
            System.out.println("enter the file name");
            String fil=dis.readLine();
            System.out.println(fil+" :is file transfer");
            File myfile=new File(fil);

            while(true)
            {
                Socket sock=servsock.accept();
                byte[] mybytearray=new byte[(int)myfile.length()];
                BufferedInputStream bis=new BufferedInputStream(new FileInputStream(myfile));
                bis.read(mybytearray,0,mybytearray.length);
                OutputStream os=sock.getOutputStream();
                os.write(mybytearray,0,mybytearray.length);
                os.flush();
                sock.close();

            }
        }

        catch(Exception saranvi)
        {
            System.out.print(saranvi);
        }
    }
}

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

class clientsvi1
{
    public static void main(String svi[])throws IOException
    {
        try
        {
            Socket sock=new Socket("localhost",5510);
            byte[] bytearray=new byte[1024];
            InputStream is=sock.getInputStream();
            DataInputStream dis=new DataInputStream(System.in);
            System.out.println("enter the file name");
            String fil=dis.readLine();
            FileOutputStream fos=new FileOutputStream(fil);
            BufferedOutputStream bos=new BufferedOutputStream(fos);
            int bytesread=is.read(bytearray,0,bytearray.length);
            bos.write(bytearray,0,bytesread);
            System.out.println("out.txt file is received");
            bos.close();
            sock.close();
        }

        catch(Exception SVI)
        {
            System.out.print(SVI);
        }
    }
}
 0
Author: r.m.Vivek Arni, 2016-07-21 06:57:10