Wirklich einfache TCP-client
Ich will mit meiner app geben Sie die url von meinem server z.B. http://192.168.1.8/
und der port, z.B. 1234
.
Wenn mein server empfängt die TCP-Request-Nachricht, sendet er eine Datei (der server ist bereits implementiert).
Ich denke, ich brauche nicht so etwas kompliziertes wie ein AsyncTask, weil ich nicht will, um die Verbindung zu halten. Empfangen der Antwort von dem server, meine Verbindung geschlossen werden muss.
Anzeichen für einen Weg oder einen Tipp sehr geschätzt.
3 Dinge:
AsyncTask
ist überhaupt nicht kompliziert; Sie do brauchen Sie so etwas wie AsyncTask
(sonst erhalten Sie eine android.os.NetworkOnMainThreadException
); Blick in die Bibliothek Retrofit
es verwaltet alles, was Sie brauchen (jeder nutzt es)InformationsquelleAutor G.V. | 2016-07-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein einfacher TCP-client, der verwendet Sockets, die ich gearbeitet haben, basiert auf code in dieses tutorial (der code für das tutorial kann auch gefunden werden in diesem GitHub-repository).
Beachten Sie, dass dieser code ist ausgerichtet, um das senden von strings hin und her zwischen dem client und dem server, in der Regel im JSON-format.
Hier ist die TCP-client-code:
Dann deklarieren Sie einen TcpClient als eine member-variable in Ihre Tätigkeit:
Verwenden Sie dann ein AsyncTask für die Verbindung zu Ihrem server und empfangen von Antworten auf den UI-thread (Beachten Sie, dass die empfangenen Nachrichten vom server verarbeitet werden, der in der
onProgressUpdate()
- Methode überschreiben in der AsyncTask):Starten Sie die Verbindung zu Ihrem server ausführen, führen Sie den AsyncTask:
Dann, das senden einer Nachricht an den server:
Können Sie die Verbindung schließen, um den server jederzeit:
Ein weiteres problem ist, dass ich bereits implementiert einen client, aber die Meldung TCP-Anforderung wird den server nicht erreichen. Auf der anderen Seite der Bestellung die gleiche Adresse aus dem browser in meinem Handy, die TCP-Anforderung-Nachricht, die erstellt wird, indem der browser sein Ziel erreicht.
es beginnt zu klingen, wie man eigentlich mit http und mit der query-string einer GET-Anforderung, und nicht tcp....
Vergessen Sie nicht, fügen Sie
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
zu IhremAndroidManifest.xml
Meine Vermutung ist, dass neuere OS-Versionen, die sind strenger, über die dieser, der original-code ist sehr alt, und arbeitete auf älteren OS-Versionen. Ich habe gerade die Antwort mit dem fix verbunden.
InformationsquelleAutor Daniel Nugent
Dank für den code. In meinem Fall war ich Probleme beim empfangen von Daten, da bin ich nicht mit einem line-basiertes Protokoll.
Ich schrieb eine Alternative Implementierung, die funktioniert mit meinem spezifischen server-setup:
In TcpClient.java Datei "run ()" - Befehl ersetzen Sie mit dem folgenden Codefragment
public void run() {
//restlicher code ist OK, siehe original
doInBackgroud in Ihrem MainActivity.java Beiträge empfangene Nachricht zu onProgressUpdate, können Sie es in einem anderen Objekt, z.B. TextView
//"Antwort" TextView-Objekt deklariert in Ihrer Funktion
Funktion und
protected void onCreate(Bundle savedInstanceState) {
response = (TextView) findViewById(R.id.textView); //..so on
Code oben Webseite, thread namens "Really simple TCP-client".. Oder sehe ich etwas anders?
An der Spitze sehe ich eine Frage ohne code. In der Mitte sehe ich eine Antwort mit code. Wenn Sie finden, die Antwort, Lesen Sie den rest von meinem Kommentar oben. I. e. Sie möchten eine eigenständige Antwort? Es könnten mehr Antworten, die mit unterschiedlich guten code. Es wäre unklar, auf welchen Sie sich beziehen. Sie können schreiben, eine Antwort, die baut auf die derzeit einzige Antwort, aber Sie sollte sich klar werden. Der Punkt ist, Ihre Antwort derzeit mag wie ein "Antwort-was-sollte-sein-Kommentar". Aber da du hast ein upvote mittlerweile (herzlichen Glückwunsch), ist es wahrscheinlich nur mir. Spaß haben.
Der Veröffentlichung auf dieser Webseite ersten mal, so kann ich nicht viel mit den Regeln vertraut (sorry dafür). Aber wenn Sie verbringen einen halben Tag auf Dinge zu arbeiten, es ist sehr klar, was Sie müssen, trotz welchen Kommentar beziehen sich auf..:). Aber danke für den Hinweis, ich werde versuchen, genauer das nächste mal. (übrigens stand-alone-Antwort brauchen würde, um original-code veröffentlicht durch den Autor, nicht nur korrigiert-fragment, so bin ich nicht sicher, Ob es ist gute Idee). Grüße.
Wenn Sie meist kopieren Sie andere Antworten code, dann Sie können schreiben, eine Antwort, die baut auf die Antwort (nicht kopieren, Sie haben Recht), aber siehe mehr klar, z.B. indem man sagt "Antwort von Daniel Nugent". Einige Zeit verging nun. Es sieht nicht so aus wie das, was ich befürchtet (viele weitere Antworten) wird jetzt geschehen. So sind Sie in Ordnung. Noch kein downvote, so dass Sie praktisch ignoriert mich. Wenn Sie finden (für die Zukunft particiapation) etwas nützliches in meinem Kommentar, dann danke für das Kompliment. Kommt die erste Antwort von Ihnen positiv bewertet werden und nicht downvoted ist eine Leistung. Freuen uns auf mehr Lesen von dir.
InformationsquelleAutor RAIMA
Versuchen, diesen code in TcpClient :
Es richtig funktioniert. Diese Zeile in den anderen code oben, um die Ursache falsch.
entfernen Sie diese Zeile und Ihre App gut funktionieren. - monitor können Sie Ihre Log-in android studio zu.
Können Sie diesen code für Ihren server in Golang.Das ist mein server:
InformationsquelleAutor Moh_beh