# Kryonnet Sever(PC),Cleint(Android)



## Lauezl (1. Dez 2021)

Hey Leute,
Ich habe mir schonmal einen Messager mit Server und Client am PC gemacht. Der funktioniert einwandfrei. Nun wollte ich ihn am Handy mit Android Studios erweitern. 
Erstmal der Code von Client
[CODE lang="java" title="Code"]public class MainClient {
    Client client;
    int udpPort = 1924, tcpPort = 1923;
    public MainClient(String IP, Context ctx){
        try {
            client = new Client(16324 * 64, 16324 * 64);
            Register.register(client.getKryo());
            client.start();
            client.connect(50000, IP, tcpPort, udpPort);
            client.addListener(new ClientListener());
        }catch(IOException e) {
            e.printStackTrace();
            Toast.makeText(ctx.getApplicationContext(),"Verbindung konnte nicht aufgebaut werden",Toast.LENGTH_LONG).show();
        }
    }[/CODE]
In  der XML habe ich das Hinzugefügt
[CODE lang="java" title="XML"]<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />[/CODE]


Ich habe die IP Addresse von meinem Computer probiert und den Localhost bei beiden kam der Fehler
[CODE lang="java" title="Fehlercode:"]I/System.out: 00:00  INFO: Connecting: /192.168.178.21:1923/1924
W/System.err: java.io.IOException: Unable to connect to: /192.168.178.21:1923
W/System.err:     at com.esotericsoftware.kryonet.TcpConnection.connect(TcpConnection.java:92)
        at com.esotericsoftware.kryonet.Client.connect(Client.java:156)
        at com.esotericsoftware.kryonet.Client.connect(Client.java:117)
        at tuba.wauzel.at.filesending.client.<init>(client.java:20)
        at tuba.wauzel.at.filesending.MainActivity$1.onClick(MainActivity.java:29)
        at android.view.View.performClick(View.java:7125)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
W/System.err:     at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
        at android.os.Handler.handleCallback(Handler.java:883)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
    Caused by: java.net.SocketException: Operation not permitted
W/System.err:     at sun.nio.ch.Net.socket0(Native Method)
        at sun.nio.ch.Net.socket(Net.java:420)
        at sun.nio.ch.Net.socket(Net.java:413)
        at sun.nio.ch.SocketChannelImpl.<init>(SocketChannelImpl.java:130)
        at sun.nio.ch.SelectorProviderImpl.openSocketChannel(SelectorProviderImpl.java:60)
        at com.esotericsoftware.kryonet.TcpConnection.connect(TcpConnection.java:73)
        ... 16 more
D/EGL_emulation: eglMakeCurrent: 0xe163c4a0: ver 2 0 (tinfo 0xe169aa40)
D/EGL_emulation: eglMakeCurrent: 0xe163c4a0: ver 2 0 (tinfo 0xe169aa40)
[/CODE]

tcp und udpPort stimme überein. Kann es sein das es daran liegt, dass ich den Android Emulator benütze?
Danke im Vorhinein.


----------



## kneitzel (1. Dez 2021)

Mal versucht die App zu deinstallieren und neu zu installieren? Wenn du eine Version ohne die Rechte zuerst installiert hattest, dann hat es das beim Update teilweise nicht genommen.

Und die Exception sieht nach fehlenden Rechten aus.


----------



## Jw456 (2. Dez 2021)

Ich hoffe du lässt die Verbindung in einen Thread laufen und nicht im UI. 
Ab Android  3 geht das nicht mehr im UI Thread.


----------



## Jw456 (2. Dez 2021)

client = new Client(16324 * 64, 16324 * 64);

Was die Zahlen bei dem Erstellen des Objekts sollen erschießt sich mir nicht so richtig.
Im allgemeinen wird da der lehre Konstruktor  ohne Parameter benutzt.

Die Doku was der Konstruktor macht habe ich noch nicht nachgeschlagen.
Vielleicht  kannst du es mir auch gleich so erklären. Was du damit bezwegst.


----------



## Jw456 (2. Dez 2021)

*Client*(int writeBufferSize, int objectBufferSize)
Ok das ist die Buffer grösse ca 1GB könnte für ein Handy besonders für den Emulator etwas groß sein.

edit :  ist  ja nur ca 1MB nicht 1GB ( 1044736 ) sollte also passen sorry.


----------

