Cliente e Servidor simples

5 respostas
E

Pessoal estou tentando implementar uma conversa com um Client e um Servidor mas na hora da resposta do Servidor nao funciona:

package clienteServer;

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

public class TCPClient
{
 
 public static void main(String[] args) throws Exception {	
	    String flag = "";
		  String sentence;
		  String modifiedSentence;		 
		  Socket clientSocket = new Socket("localhost", 6789);
		  while(flag.equalsIgnoreCase("")){				
			  BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
			  DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
			  BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
			  System.out.println("Everton diz: ");
			  sentence = inFromUser.readLine();
			  outToServer.writeBytes(sentence + '\n');
			  modifiedSentence = inFromServer.readLine();
			  System.out.println("Server diz: " + modifiedSentence);
		  }
		  clientSocket.close();
		
	}
 
}
package clienteServer;

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class TCPServer {

	public static void main(String[] args) throws Exception {
		String clientSentence;
        String capitalizedSentence;
        ServerSocket welcomeSocket = new ServerSocket(6789);
        Socket connectionSocket = welcomeSocket.accept();
        while(true)
        {        
           BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
           DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
           clientSentence = inFromClient.readLine();
           System.out.println("Received: " + clientSentence);           
           capitalizedSentence = clientSentence.toUpperCase() + '\n'; // Se eu colocar um   BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in)) PARA DE FUNCIONAR PQ?;

           outToClient.writeBytes(capitalizedSentence);
        }
		
	}
	
}

5 Respostas

E
evertonsilvagomesjava:
Pessoal estou tentando implementar uma conversa com um Client e um Servidor mas na hora da resposta do Servidor nao funciona:
package clienteServer;

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

public class TCPClient
{
 
 public static void main(String[] args) throws Exception {	
	    String flag = "";
		  String sentence;
		  String modifiedSentence;		 
		  Socket clientSocket = new Socket("localhost", 6789);
		  while(flag.equalsIgnoreCase("")){				
			  BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
			  DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
			  BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
			  System.out.println("Everton diz: ");
			  sentence = inFromUser.readLine();
			  outToServer.writeBytes(sentence + '\n');
			  modifiedSentence = inFromServer.readLine();
			  System.out.println("Server diz: " + modifiedSentence);
		  }
		  clientSocket.close();
		
	}
 
}
package clienteServer;

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class TCPServer {

	public static void main(String[] args) throws Exception {
		String clientSentence;
        String capitalizedSentence;
        ServerSocket welcomeSocket = new ServerSocket(6789);
        Socket connectionSocket = welcomeSocket.accept();
        while(true)
        {        
           BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
           DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
           clientSentence = inFromClient.readLine();
           System.out.println("Received: " + clientSentence);           
           capitalizedSentence = clientSentence.toUpperCase() + '\n'; // Se eu colocar um   BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in)); capitalizedSentence = infromUser.readLine(); PARA DE FUNCIONAR PQ? A MENSAGEM NAO E RETORNADA AO CLIENTE;

           outToClient.writeBytes(capitalizedSentence);
        }
		
	}
	
}
I

fica mais facil vc falar oq esta acontecendo, pq nao esta funcionando, em apenas colocar o codigo

dificil alguem responder dessa forma, pq tem q ler o codigo, entender teu raciocinio pra descobrir qual o erro

E

Na minha classe TCPServerClient quando eu mando a msg para o servidor assim:

while(flag.equalsIgnoreCase("")){ BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in)); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); System.out.println("Everton diz: "); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); System.out.println("Server diz: " + modifiedSentence); }

Vai corretamente, quando chega no TCPServer a msg e ele responde apenas dando um toUpperCase na msg vinda do Client funciona, mas quando eu tento digitar algo para o Servidor responder nao funciona, ele chega na linha

outToClient.writeBytes(capitalizedSentence);

E volta no while do proprio servidor em vez de ir para o Client

R

Bom dia, Everton Silva

Eu peguei seu código e fiz uma alteração para que o chat funcione.  uma olhada ai.

Cliente

import java.net.Socket;
import java.util.Scanner;
import java.io.*;

public class TCPClient {
	public static void main(String args[]) throws Exception {
		while (true) {
			Socket clientSocket = new Socket("127.0.0.1", 6789);
			ObjectOutputStream outToServer = new ObjectOutputStream(clientSocket.getOutputStream());
			System.out.println("Cliente diz: ");
			Scanner fromClient = new Scanner(System.in);
			outToServer.writeObject(fromClient.nextLine());
			outToServer.flush();
			ObjectInputStream inFromServer = new ObjectInputStream(clientSocket.getInputStream());
			String strMsg = inFromServer.readObject().toString();
			System.out.println("Server diz: \n" + strMsg);
			clientSocket.close();
		}
	}
}

Servidor

import java.net.Socket;
import java.net.ServerSocket;
import java.util.Scanner;
import java.io.*;

public class TCPServer {
	public static void main(String args[]) throws Exception {
		while (true) {
			ServerSocket welcomeSocket = new ServerSocket(6789);
			Socket connectionSocket = welcomeSocket.accept();
			ObjectInputStream inFromClient = new ObjectInputStream(connectionSocket.getInputStream());
			Object clientSentence = inFromClient.readObject();
			System.out.println("Cliente diz: \n" + clientSentence.toString());
			ObjectOutputStream toClientSetence = new ObjectOutputStream(connectionSocket.getOutputStream());
			System.out.println("Server diz:");
			Scanner x = new Scanner(System.in);
			toClientSetence.writeObject(x.nextLine());
			toClientSetence.flush();
			welcomeSocket.close();
			connectionSocket.close();
		}
	}
}

[b][size=18]Copia o codigo e dá uma alterada nele pois vou enviar para o professor também este código.

Escrotizada básica de forum. Deu nois Verton[/size][/b]

V

Dê uma lida aqui: http://guj.com.br/java/136538-duvida-simples#735860
E aqui: http://guj.com.br/java/74218-chat-em-java--usando-socket-e-thread/2#506163

E baixe o wireshark para poder ver o que circula pela rede.

Criado 12 de abril de 2012
Ultima resposta 13 de abr. de 2012
Respostas 5
Participantes 4