Android TCP Server-Client-Kommunikation

Fand ich ein gut geschriebenes tutorial hier für server-client-Kommunikation auf android. Funktioniert wie ein Charme. Es ist aber nur one-way-Kommunikation. Ich versuche zu hören, server-Antwort, die im client aber nicht weiß, wo ich bin falsch hier. Hier ist der code für den server wo ich bin versuchen, um änderungen vorzunehmen.

Server

public class Server extends Activity {

    private ServerSocket serverSocket;

    Handler updateConversationHandler;

    Thread serverThread = null;

    private TextView text;



    public static final int SERVERPORT = 8080;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        text = (TextView) findViewById(R.id.text2);

        updateConversationHandler = new Handler();

        this.serverThread = new Thread(new ServerThread());
        this.serverThread.start();

    }

    @Override
    protected void onStop() {
        super.onStop();
        try {
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    class ServerThread implements Runnable {

        public void run() {
            Socket socket = null;
            try {
                serverSocket = new ServerSocket(SERVERPORT);
            } catch (IOException e) {
                e.printStackTrace();
            }
            while (!Thread.currentThread().isInterrupted()) {

                try {

                    socket = serverSocket.accept();

                    CommunicationThread commThread = new CommunicationThread(socket);
                    new Thread(commThread).start();

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

    class CommunicationThread implements Runnable {

        private Socket clientSocket;

        private BufferedReader input;

        public CommunicationThread(Socket clientSocket) {

            this.clientSocket = clientSocket;

            try {

                this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        public void run() {


            while (!Thread.currentThread().isInterrupted()) {

                try {

                    String read = input.readLine();

                     if (read == null ){
                         Thread.currentThread().interrupt();
                     }else{
                         BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
                         out.write("TstMsg");
                         updateConversationHandler.post(new updateUIThread(read));

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

    }

    class updateUIThread implements Runnable {
        private String msg;

        public updateUIThread(String str) {
            this.msg = str;
        }

        @Override
        public void run() {
            text.setText("Client Says: "+ msg + new Date() + "\n");

        }

    }

}

Client

public class Client extends Activity {

    private Socket socket;

    private static final int SERVERPORT = 8080;
    private static final String SERVER_IP = "192.168.104.107";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      
                    new Thread(new ClientThread()).start();

    }


    public void onClick(View view) {
        try {
            EditText et = (EditText) findViewById(R.id.EditText01);
            String str = et.getText().toString();
            PrintWriter out = new PrintWriter(new BufferedWriter(
                    new OutputStreamWriter(socket.getOutputStream())),
                    true);
            out.println(str);
            out.flush();
            BufferedReader  in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String read = in.readLine();
            System.out.println("MSG:" + read);  

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    class ClientThread implements Runnable {

        @Override
        public void run() {

            try {
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
                socket = new Socket(serverAddr, SERVERPORT);

            } catch (UnknownHostException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        }

    }
}

Update

Beim client senden eine Nachricht zu server die Nachricht empfangen wird von server aber wenn der server schickt seine Antwort

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
 out.write("TstMsg");

als auch im client

String read = in.readLine();
System.out.println("MSG:" + read); 

Es Dosis nicht erhalten, die von client-oder sagen wir server listen Kunden-message-client aber nicht.
Ich habe beide Berechtigungen in der manifest.

<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>

Update
Nach einem langen hängen, kommt dieser Fehler.

11-28 18:35:45.786: E/GTalkService(292): connectionClosed: no XMPPConnection - That's strange!
11-28 18:35:48.806: D/ConnectivityService(148): handleInetConditionHoldEnd: net=1, condition=0, published condition=0
11-28 18:35:54.526: I/GTalkService/c(292): [AndroidEndpoint@1090563472] connect: acct=1000000, state=CONNECTING
11-28 18:35:55.176: D/dalvikvm(1167): GC_CONCURRENT freed 495K, 9% free 6604K/7239K, paused 2ms+3ms
11-28 18:35:55.226: D/Finsky(1167): [1] 5.onFinished: Installation state replication succeeded.
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349): Problem with socket or streams.
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349): java.net.ConnectException: failed to connect to www.google-analytics.com/173.194.39.41 (port 80): connect failed: ETIMEDOUT (Connection timed out)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at libcore.io.IoBridge.connect(IoBridge.java:114)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at java.net.Socket.connect(Socket.java:842)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at com.google.android.apps.analytics.t.run(Unknown Source)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at android.os.Handler.handleCallback(Handler.java:605)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at android.os.Handler.dispatchMessage(Handler.java:92)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at android.os.Looper.loop(Looper.java:137)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at android.os.HandlerThread.run(HandlerThread.java:60)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349): Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at libcore.io.Posix.connect(Native Method)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  at libcore.io.IoBridge.connect(IoBridge.java:112)
11-28 18:37:18.276: W/GoogleAnalyticsTracker(349):  ... 9 more
11-28 18:37:29.016: D/dalvikvm(349): GC_CONCURRENT freed 1258K, 35% free 8238K/12487K, paused 2ms+8ms
  • haben u sofern die Erlaubnis, das internet in dem Projekt???
  • Was ist das problem , erklären Sie es gut, werden Sie sagen, tat es funktioniert wie ein Charme, aber weiß nicht, wheres the problem
  • vielen Dank für Ihr Interesse ich habe aktualisiert die Frage.
  • hey das tutorial, der link ist toll. Aber wie können wir diesen code ausführen im echten android-Gerät? nicht im emulator. Was ist mit port-forwarding gibt es?
InformationsquelleAutor user934820 | 2013-11-28
Schreibe einen Kommentar