socket - Zócalos de cliente y servidor Android
servidor udp android (2)
Si intentas conectarte a tu pc desde el teléfono, entonces tienes que cambiar la estática privada String hostname = "localhost" para
private static final String hostname = your-pc-ip
Puedes ver tu ip con el comando ipconfig en windows, y ifconfig en linux
Estoy trabajando en Android Studio, y estoy tratando de conectar un servidor que hice, sin éxito. Pude conectar el cliente al servidor cuando el cliente es mi computadora con éxito, cuando utilicé este código:
socket = null;
try
{
Log.e("client", "Attempting to connect to serverrrrrr.");
socket = new Socket(hostname, portnumber);
Log.e("client", "Connected ! ");
cuando el nombre de host es como: private static final String hostname= "localhost"; private static final int portnumber=55555;
private static final String hostname= "localhost"; private static final int portnumber=55555;
luego, me di cuenta de que no funciona cuando intento conectarme con el cliente desde el teléfono, porque necesito poner una dirección IP REAL, y no la del localhost. Por lo tanto, intenté esto:
private static final String hostname= "10.0.0.1";
private static final int portnumber=55555;
con el mismo código anterior, y no funcionó. Es solo permanecer en la línea de: nuevo Socket ... y no avanza y, por lo tanto, no está conectado de manera suculenta. Qué estoy haciendo mal ?
También tengo este fragmento de código: <uses-permission android:name="android.permission.INTERNET"/>
y yo hice "reenvío de puerto". Que más puedo hacer ?
01-30 18:16:47.760 16158-16210/com.omer.tictactoemultiplayer W/System.err: java.net.ConnectException: failed to connect to /10.0.0.1 (port 55555): connect failed: ETIMEDOUT (Connection timed out)
código del servidor: `public class Server extends Thread {
private static final int portnumber = 55555;
@Override
public void run() {
ServerSocket serverSocket = null;
try {
Log.e("Server", "Server starting at port number: " + portnumber);
serverSocket = new ServerSocket(portnumber);
while(true)
{
// Client connecting.
Log.e("Server", "Waiting for clients to connect ...");
Socket socket1 = serverSocket.accept();
Log.e("Server", "Client one has connected.");
Socket socket2 = serverSocket.accept();
Log.e("Server", "Client two has connected.");
//Send message to the server.1
BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(socket1.getOutputStream()));
bw1.write("found");
bw1.newLine();
bw1.flush();
BufferedWriter bw2 = new BufferedWriter(new OutputStreamWriter(socket2.getOutputStream()));
bw2.write("found");
bw2.newLine();
bw2.flush();
new ServerThread(socket1,socket2).start();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
} `
Si solo cambiaste el host de localhost a la ip de tu computadora, entonces tu código java que corre tan bien en tu PC no funcionará para Android.
Como entonces tienes que poner el código de Internet en un hilo o AsyncTask.
Si no lo hace, tendrá una NetworkOnMainThreadException
claramente visible en el logcat.