Autore Topic: Socket tramite rete  (Letto 575 volte)

Offline Neptune

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer Iconia Tab A501
  • Sistema operativo:
    Mac OS X 10.6.8
Socket tramite rete
« il: 28 Luglio 2011, 16:31:05 CEST »
0
Salve a tutti,
in poche parole sto provando a fare un mini programmino che comunica tramite socket. Sul mio pc fisso ho già un server scritto in java che comunicava tramite socket e stavo provando in pratica a sviluppare un client da far girare sul mio tablet android 3.0 che comunichi con il server che ho sul pc.
Ho provato a scrivere poche righe di codice sfruttando le librerie standard del java:

Codice: [Seleziona]
package com.neptune.prova3;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import com.neptune.prova3.R;

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

public class Android3Activity extends Activity {
    /** Called when the activity is first created. */
        private ObjectOutputStream out;
        private ObjectInputStream in;
        private InetAddress addr;
        Socket socket;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        //Connessione al server
            try {
                    // indirizzo riservato al localhost 127.0.0.1
                        addr = InetAddress.getByName("192.168.1.101");
                } catch (UnknownHostException e1) {
                        e1.printStackTrace();
                        ((TextView) this.findViewById(R.id.textView1)).setText(e1.getMessage());
                }
                try {
                        socket = new Socket(addr, 8085);
                         //out = new ObjectOutputStream(socket.getOutputStream());
                         //in = new ObjectInputStream(socket.getInputStream());
                         ((TextView) this.findViewById(R.id.textView1)).setText("CREATO IL SOCKET");
                } catch (IOException e1) {                       
                        e1.printStackTrace();
                        socket = null;
                         ((TextView) this.findViewById(R.id.textView1)).setText(e1.getMessage());
                       
                }
    }
}

Ma mi sollevava l'eccezione Access Denied, quindi documentandomi su internet ho visto che bisognava abilitare i permessi nel file Manifest, nella fattispecie i permessi per internet, ho quindi modificato il mio file manifest in questa maniera:

Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.neptune.prova3"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="11" />
     <uses-permission android:name="android.permission.INTERNET" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Android3Activity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

nella fattispecie ho aggiunto la seguente riga:
Codice: [Seleziona]
     <uses-permission android:name="android.permission.INTERNET" />

aggiungendo questa riga però il programma appena avviato crasha.

Non riesco proprio a capire da cosa dipenda, contando tra l'altro la semplicità del programma. Avete qualche idea a riguardo?

Vi ringrazio in anticipo,
Neptune.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Socket tramite rete
« Risposta #1 il: 28 Luglio 2011, 16:36:26 CEST »
0
Dovresti postare il logcat ;)
Se non sai cos'è guarda nella mia firma...

PS: per l'accesso a rete ti converrebbe fare tutto in un thread separato o ancora meglio in un Service...