Permanentni Socket v Androidu – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Permanentni Socket v Androidu – Java – Fórum – Programujte.comPermanentni Socket v Androidu – Java – Fórum – Programujte.com

 

VladislavK0
Super člen
16. 5. 2016   #1
-
0
-

Mám teoretickou otázku, lze v Androidím equipmentu na trvalo otevřít Socket komunikaci?

Používám tento kód, který ale díky volaní AsyncTask vždy tu komunikaci uzavře. Jednu instance AsyncTask lze volat pouze jednou.

   public String activateSocket(final byte[] data) throws IOException {
        if (socketIsFree) {
            socketIsFree = false;
            try {
                socket = new Socket();
                Log.i("SOCKET", "Start");
                socket.setSoTimeout(TIMEOUT);
                InetSocketAddress ins = new InetSocketAddress(BASEURL, PORT);
                Log.i("SOCKET", ins.toString());
                socket.connect(ins, 1000);// TIMEOUT);
                Log.i("SOCKET", String.format("TimeOut %dms %s", socket.getSoTimeout(), socket.getLocalAddress().toString()));
                socket.setKeepAlive(false);
                socket.setSendBufferSize(SENDBUFFSIZE);
                socket.setReceiveBufferSize(RECBUFFSIZE);
                StringBuilder sb = new StringBuilder();
                final InputStream is = socket.getInputStream();
                final BufferedReader br = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
                String tx = "";
                try {
                    //Log.i("SOCKET",s);
                    final OutputStream os = socket.getOutputStream();
                    os.write(data);
                    os.flush();
                    Log.i("SOCKET", "Start receiving");
                    long ms = System.currentTimeMillis();
                    char[] chb = null;
                    while (true) {
                        new Thread().sleep(10);
                        int aval = is.available();
                        Log.i("SOCKET", String.valueOf(aval));
                        if (aval > 0) {
                            // prvni 4 byte oznacuji delku paketu je to litle endian
                            byte []b=new byte[4];
                            is.read(b,0,4);
                            delkaPaketu= ByteBuffer.wrap(b).order(ByteOrder.LITTLE_ENDIAN).getInt();
                            chb = new char[delkaPaketu];
                            precteno+= br.read(chb, 0, delkaPaketu);
                            sb.append(chb);
                            if (precteno==delkaPaketu) {
                                sb.trimToSize();
                                tx = sb.toString();
                                break;
                            }
                        }
                        if (System.currentTimeMillis() - ms > TIMEOUT * 2) {
                            throw new SocketTimeoutException();
                        }
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    //StopSocket();
                }
                Log.i("SOCKET", "Received data: " + tx);
                Log.i("SOCKET", "End receiving");
                return tx;
            } catch (SocketTimeoutException ste) {
                Log.i("SOCKET", "TimeOut");
                ste.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //StopSocket();
            }
            socketIsFree = true;
        }
        return null;
    }

Diky za každou myšlenku

Nahlásit jako SPAM
IP: 37.48.9.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý