Estoy escribiendo mi primer programa cliente/servidor java que solo establece una conexión con el servidor le envía una oración y el servidor devuelve la oración en mayúsculas. Este es en realidad un ejemplo directamente del libro, y funciona bien y bien cuando estoy ejecutando el cliente y el servidor en la misma máquina y usando localhost para la dirección del servidor. Pero cuando pongo el programa cliente en una computadora diferente, se agota y nunca establece una conexión con el servidor. No estoy seguro de por qué esto es así y es una especie de cojera que lo convierte en su primer programa de cliente/servidor y que en realidad no puede usarlo en dos máquinas diferentes. Aquí está el código de cliente:Programa Simple Cliente/Servidor Java
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String argv[]) throws Exception {
String sentence;
String modifiedSentence;
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("localhost", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
System.out.println(modifiedSentence);
clientSocket.close();
}
}
Aquí está el código del servidor:
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String args[]) throws Exception {
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
}
}
}
El único cambio cuando lo ejecuto en dos máquinas diferentes es el programa cliente hace su zócalo con la dirección IP de la máquina con el programa de servidor (que obtuve de whatismyipaddress.com). Muchas gracias por cualquier ayuda.
Actualización: Estoy en un campus y parece que probablemente no me permita usar ese puerto aleatorio. ¿Alguna sugerencia para averiguar qué puerto puedo usar y/o un puerto que es más que probable?
Y se puede conectar con el servidor a través de esta dirección IP ¿de otra manera? (Usando ping/telnet/traceroute/etc.) – McDowell
Antes de intentar depurar el programa, quizás intente y asegúrese de poder hacer ping a la otra computadora primero. De esa forma, usted sabe que la red no tiene la culpa. –
Intenté hacer ping y funcionó. – Anton