Android TCP Sockets timeout

Mache ich eine app benötigt für die Kommunikation mit TCP-sockets. Ich habe ein Service, der meine TCP-Server und eine Tätigkeit, die ist mein TCP-Client.

Habe ich eine große Verzögerung zwischen senden einer Nachricht und dem Empfang einer Antwort vom server, wie 10 oder mehr Sekunden. Nach einigen Tagen der Forschung, fand ich, wie set timeout auf der client-Anfrage und alle beginnen zu funktionieren.

Also meine Frage ist, ist es zwingend erforderlich, um set-up-timeout für eine TCP-Verbindung, sonst funktioniert es nicht oder es ist etwas anderes falsch mit meiner Umsetzung?

Hier ist mein Client-code:

public static void sendTCP(final InetAddress senderAddr, final String Msg, final int serverPort) {
        Thread tclient = new Thread(){
            public void run() {
                boolean connected;
                Socket socket = new Socket();
                try {
                    Log.d("TCP", "Client: Connecting...");
                    socket.bind(null);
                    socket.connect((new InetSocketAddress(senderAddr, serverPort)), 1000);
                    connected = true;
                try {
                    Log.d("TCP", "Client: Sending command.");
                    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
                    out.println(Msg);
                    out.close();
                } 
                catch (Exception e) {
                    Log.e("TCP", "Client: Error sending.", e);
                }
                } catch (Exception e) {
                    Log.e("TCP", "Client: Error connecting.", e);
                    connected = false;
                }
                finally {
                    if (socket != null) {
                        if (socket.isConnected()) {
                            try {
                                socket.close();
                                Log.d("TCP", "Client: Connection Closed.");
                            } catch (IOException e) {
                                Log.e("TCP", "Client: Error closing connection.", e);
                            }
                        }
                    }
                }
            }
        };
        tclient.start();
    }

Und Server:

public void onStart(Intent intent, int startid) {

    t = new Thread(){
         public void run() {
             try {
                Boolean end = false;
                Log.d("TCP", "Server: Creating server.");
                ServerSocket ss = new ServerSocket(TCPPORT);
                while(!end) {
                    //Server is waiting for client here, if needed
                    Log.d("TCP", "Server: Waiting on packet!");
                    Socket s = ss.accept();
                    BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
                    String st = input.readLine();
                    Log.d("TCP", "Server: Message received from client: "+st);

                    InetAddress senderAddr = s.getInetAddress();
                    senderAddrString= senderAddr.getHostAddress();

                    myAddrString = GetLocalIpAddress();
                    myAddr = InetAddress.getByName(myAddrString);

                    if (senderAddr.equals(myAddr)) {
                    }
                    else {
                        //Estraggo dal pacchetto ricevuto
                        try {
                            StringTokenizer tokens = new StringTokenizer(st, "|");
                            flag = tokens.nextToken();
                            userid = tokens.nextToken();
                            payload = tokens.nextToken();
                        }
                        catch (Exception e) {
                            Log.e("TCP", "Server: Errore estrazione dati.");
                        }

                        if (flag.equals(Constants.flag_scan_answer)) {
                            Log.d("TCP", "Server: Flag answer");
                            //devo passare i dati ad un database ScanActivity

                            //database(senderAddrString,userid);

                            System.out.println("RISPOSTA RICEVUTA DAL SERVICE TCP");
                            System.out.println("FLAG " + flag);
                            System.out.println("USERID " + userid);
                            System.out.println("PAYLOAD " + payload);

                            announceReceivingPacket();
                        }

                        else {
                            Log.d("TCP", "Server: CASO NON PREVISTO");
                        }
                    }
                    s.close();
                }
            }
            catch (UnknownHostException e) {
                    e.printStackTrace();
            } 
            catch (IOException e) {
                    e.printStackTrace();
            }
         }
    };
    t.start();
 }
InformationsquelleAutor phcaze | 2012-12-07
Schreibe einen Kommentar