C# / Network: Wie kann man eine Void ausführen wenn ein Socket disconnected?

Ich versuche eine Void auszuführen, wenn ein Socket von meinem Server disconnected. Aber ich bekomme es einfach nicht hin.

Vorab: Ich habe eine eigene Klasse namens GameClient. Diese beinhaltet einfach nur einen Socket und eine ID. Die ID spielt aber in dem Skript keine Rolle.

Bei Zeile 34. sollte er mir dann ausgeben das der Client disconnected. Aber er geht nicht einmal in das try-catch hinein.

Hier ist mein momentanes Serverskript:

_serversocket.Bind(new IPEndPoint(IPAddress.Any, this.Port));
_serversocket.Listen(0);
_serversocket.BeginAccept(AcceptCallback, null);

private void AcceptCallback(IAsyncResult ar)
{
  if (!this.AllowConnection && !(clientlist.Count < this.maxClients)) return;

  GameClient client = new GameClient();

  try
  {
    client._socket = _serversocket.EndAccept(ar);
  }
  catch (ObjectDisposedException)
  {
    client.DestroySelf();
    return;
  }

  client._socket.BeginReceive(buffer, 0, BUFFER_SIZE, SocketFlags.None, ReceiveCallback, client);
  OnClientJoin(client);
  _serversocket.BeginAccept(AcceptCallback, null);
}

private void ReceiveCallback(IAsyncResult ar)
{
  GameClient client = ar.AsyncState as GameClient;
  int received;

  try
  {
    received = client._socket.EndReceive(ar);
  }
  catch (SocketException)
  {
    Console.WriteLine("Client disconnected");
    ClientDisconnect(client);
    return;
  }

  byte[] recBuf = new byte[received];
  Array.Copy(buffer, recBuf, received);
  string text = Encoding.ASCII.GetString(recBuf);
  // Text repräsentiert den erhaltenen String des Clients
}

Ich hatte das Ganze schon einmal in einem anderen Skript gemacht. Dort hat es mit dem try-catch funktioniert. Ich habe zum Versuch die Stelle der "Detektion vom Disconnect" exakt wie beim funktionierenden Skript geschrieben, aber es ging nicht.

Server, Computer, Technik, Programm, CSharp, Networking, Technologie
Java Email verschicken - woran liegt es?

das hier ist mein Code, den ich hier - Achtung, harter Akzent! abgeschrieben habe.

Ich erhalte dennoch diese Exception:

javax.mail.NoSuchProviderException: No provider for smpt
	at javax.mail.Session.getProvider(Session.java:483)
	at javax.mail.Session.getTransport(Session.java:681)
	at javax.mail.Session.getTransport(Session.java:662)
	at MailSender.sendEmail(MailSender.java:61)
	at MailSender.main(MailSender.java:19)

auf einem Eintrag von Stackoverflow stand, dass ich die SMTP.jar brauche ist die nicht in com.sun.mail enthalten?

hier meine Maven pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.thoraxl</groupId>
    <artifactId>JavaMailTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>15</maven.compiler.source>
        <maven.compiler.target>15</maven.compiler.target>
    </properties>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>javax.mail-api</artifactId>
            <version>1.5.6</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>
    </dependencies>
</project>
E-Mail, Programmieren, Java, Networking
Dedicated Server Port Forwarding?

Hallo,

ich habe ein Frage zu dem oben genannten Thema. Ich möchte ein Spiel entwickeln und dieses natürlich möglichst im öffentlichen Multiplayer. Wie bei den meisten Multiplayer Spielen mit einem "Dedicated Server".

Zum Testen jedoch habe ich das Spiel erstmal auf LAN Multiplayer ausgelegt und das funktioniert auch prima. Mein nächster Schritt wäre "Port Forwarding" in meinem Router, damit auch meine Freunde(nur denen den ich vertraue) dem Spiel von zuhause beitreten können.

Meine Frage ist nun, wenn ich so einen "Dedicated Server" mieten würde, müssen ich und meine Freunde irgendetwas im Router verändern (hinsichtlich Port Forwarding)?

Bei den meisten Multiplayer Spielen kann ja sofort losgespielt werden ohne etwas einzustellen. Ich denke mal mit so einem Server muss Port Forwarding nur einmal für den Server eingestellt werden und nicht für alle die sich damit verbinden???

Ich denke ich habe das Prinzip von Port Forwarding nicht richtig verstanden, könnte mir da jemand Klarheit verschaffen?:)

PS: Kleine Bonusfrage für die die es genau wissen:) Mein Android Handy kann das Spiel auch installieren und öffnen jedoch klappt hier die LAN Verbindung zu meinem Laptop nicht(Host), anders als bei Laptop-Laptop wo es klappt. Mir wurde hier gesagt dass es irgendwo bei Androids eine Einstellung geben soll die man anstellen muss. Kann mir hier jemand sagen welche das ist? Ich finde da einfach nichts...

Danke für alle Antworten von euch:)

Computer, Technik, Gaming, dedicated-server, Android, LAN, Networking, Port Forwarding, Technologie, godot, Spiele und Gaming

Meistgelesene Fragen zum Thema Networking