Problema con socket in applicazione client/server

di il
4 risposte

Problema con socket in applicazione client/server

Buonasera,ho un computer cn win 7 collegato tramite ethernet ad un router senza connessione internet. Quello ke voglio fare e' inviare messaggi di testo tipo chat a questo computer tramite un cellulare android. Ho creato server e client utilizzando le socket,ma non sembra funzionare.qual e' la soluzione migliore?
Com faccio a sapere quale indirizzo ip utilizzare? Di seguito trovate il codice delle due applicazioni.

Questo é il codice dell applicazione lato client ke gira su cellulare:

package it.devapp.activity;




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

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Client extends Activity {
/** Called when the activity is first created. */


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView vt = (TextView) findViewById(R.id.textView1);

try
{

Socket s1 = new Socket ("0.0.0.0", 8888);
DataOutputStream outputStream = new DataOutputStream(s1.getOutputStream());
DataInputStream inputStream = new DataInputStream(s1.getInputStream());

vt.setText(inputStream.readUTF());

outputStream.writeUTF("Questa ? una prova");


// vt.setText("Risposta del server: " + dis.readLine());


// Al termine, chiude lo stream di comunicazione e il socket.

s1.close();
inputStream.close();
outputStream.close();
System.out.println("Chiusura connessione effettuata");
}



catch (IOException ex)
{
ex.printStackTrace();
}
}
}



Qui invece trovate il codice dell applicazione lato server che gira su pc
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

/**
* @param args
*/
public static void main(String[] args) {

ServerSocket serverSocket = null;
Socket socket = null;
DataInputStream inputStream = null;
DataOutputStream outputStream = null;

try {
serverSocket = new ServerSocket (8888);
System.out.println("Socket iniziata, ip: "+serverSocket.getLocalSocketAddress());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
System.out.println("Prove");
socket = serverSocket.accept();

inputStream = new DataInputStream(socket.getInputStream());
outputStream = new DataOutputStream(socket.getOutputStream());
System.out.println("ip: "+socket.getInetAddress());
//System.out.println("messaggio: "+ inputStream.readUTF());
outputStream.writeUTF("hello!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
outputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}

}
L'applicazione comprende la uses-permission di internet sul lato server per android

Attendo aiuti e saluto

4 Risposte

  • Re: Problema con socket in applicazione client/server

    Ciao!!
    L'indirizzo ip da utilizzare lo puoi trovare eseguendo il comando "ipconfig" da terminale e cercando l'IP assegnato all'interfaccia ethernet (in genere è qualcosa del tipo 192.168.x.y). Affinché questo IP sia raggiungibile dal tuo smartphone, è necessario che anche lo smartphone sia collegato (ad esempio tramite wi-fi) allo stesso router al quale hai collegato il pc.

    Una volta fatto questo, devi cambiare il primo parametro nel costruttore della socket s1 nell'applicazione android, sostituendo il "0.0.0.0" con l'IP che hai trovato.

    Una nota: l'indirizzo "0.0.0.0" che usi (probabilmente perché è quello che fai stampare dalla server socket) non è un indirizzo valido. In pratica viene usato solo dalla ServerSocket per indicare che è in attesa di connessioni (ovvero in stato di listen) su uno qualsiasi dei propri indirizzi IP.

    Fammi sapere se funziona!!
  • Re: Problema con socket in applicazione client/server

    R.id.textView1
    ma non è che il problema è questo? ogni tanto eclipse non riesce a prendere i valori della classe R generata automaticamente!! cmq se vuoi ti lascio la mail cosi mi passi tutto il codice sorgente e gli do un occhio
  • Re: Problema con socket in applicazione client/server

    Ciao, credo che il problema stia nel fatto che utilizzi i canali DataInput/OutputStream senza un DataSocket e una ServerDataSocket,credo non ne ho la certezza
  • Re: Problema con socket in applicazione client/server

    DataSocket? Ho appena guardato nelle API Android e non esiste...hai provato a mettere l'IP del server invece di "0.0.0.0" al momento della creazione della socket?
Devi accedere o registrarti per scrivere nel forum
4 risposte