Hallo,
ich habe ein Problem mit einem StreamReader und ich habe keine ahnung warum er nicht funktioniert. Ich hoffe ihr könnt mir helfen.
Vielen Dank im Vorraus.
MfG
Klemens
ich habe ein Problem mit einem StreamReader und ich habe keine ahnung warum er nicht funktioniert. Ich hoffe ihr könnt mir helfen.
Code:
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace VerbindungKlasseTest
{
static class Verbindung
{
// Enum das die Anfragen an den Server beschreibt
public enum Status
{
LoginAkzeptiert,
LoginAbgelehnt,
RegistrationAkzeptiert,
RegistrationAbgelehnt
}
#region Variablen
// Die Variable die die aufzurufende Methode enthält
internal static OnServerReceivesMessage NachrichtEmpfangenEvent;
// Delegate zum aufrufen des Events
internal delegate void OnServerReceivesMessage(string nachricht);
// Die Verbindung zum Server
private static TcpClient _server;
// Zum lesen von Informationen aus dem Stream des Servers
private static StreamReader _streamReader;
// Zum schreiben von Informationen in den Stream des Servers
private static StreamWriter _streamWriter;
// Gibt an ob man Verbunden ist
public static bool Verbunden { get; private set; }
// Der Thread um Nachrichten zu Empfangen
private static Thread _nachrichtEmpfangen;
#endregion
/// <summary>
/// Die Verbindung zum Server aufbauen
/// </summary>
/// <param name="ipAddress">Die IP-Adresse des Servers</param>
/// <param name="port">Der Port auf dem der Server läuft</param>
public static void Verbinden(IPAddress ipAddress, int port)
{
// Die verbindung instanzieren und verbinden
_server = new TcpClient();
_server.Connect(ipAddress, port);
// Wenn man verbunden ist
if (_server.Connected)
{
// StreamReader und Streamwriter mit dem Stream des Servers instanzieren
NetworkStream stream = _server.GetStream();
_streamReader = new StreamReader(stream);
_streamWriter = new StreamWriter(stream);
// Gibt an das man verbunden ist
Verbunden = true;
// Den Thread zum Nachrichten Empfangen starten
_nachrichtEmpfangen = new Thread(NachrichtEmpfangen);
_nachrichtEmpfangen.Start();
}
}
/// <summary>
/// Die Verbindung zum Server trennen
/// </summary>
public static void Trennen()
{
if (Verbunden)
{
try
{
if (_server != null)
{
_server.Close();
}
if (_streamReader != null)
{
_streamReader.Close();
_streamReader.Dispose();
}
if (_streamWriter != null)
{
_streamWriter.Close();
_streamWriter.Dispose();
}
if (_nachrichtEmpfangen.IsAlive)
{
_nachrichtEmpfangen.Abort();
}
}
finally
{
Verbunden = false;
}
}
}
/// <summary>
/// Sendet eine Nachricht an den Server
/// </summary>
/// <param name="nachricht">Die zusendende Nachricht</param>
public static void NachrichtSenden(string nachricht)
{
if (!string.IsNullOrEmpty(nachricht))
{
_streamWriter.WriteLine(nachricht);
_streamWriter.Flush();
}
}
private static void NachrichtEmpfangen()
{
while (Verbunden)
{
string read = _streamReader.ReadLine();
BeiNachrichtEmpfangen(read);
}
}
private static void BeiNachrichtEmpfangen(string nachricht)
{
OnServerReceivesMessage serverReceivesMessage = NachrichtEmpfangenEvent;
if (serverReceivesMessage != null)
{
serverReceivesMessage(nachricht);
}
}
}
}
Vielen Dank im Vorraus.
MfG
Klemens