Ich wollte einen Blick in die TCP-Kommunikation in C# werfen. Ich habe bereits mit einfachen Programmen zum Empfangen und Senden über TCP gelernt. Ich möchte jedoch noch einen Schritt weiter gehen.Zugriff auf eine TCP-Verbindung von der Funktion. C#
--EDIT: Die einfachen Programme haben alle gemeinsam, dass sie die TCP-Verbindung öffnen, senden oder empfangen und die Verbindung schließen. Bei Bedarf beginnen sie von vorne. Aber das ist nicht das, was ich für mein Programm vorhabe. EDIT--
Was ich tun möchte:
Ich habe ein Formular mit einer Schaltfläche, die eine Verbindung zu einem Server. (Der Server ist vorhanden und funktioniert ordnungsgemäß.) Nachdem die Verbindung hergestellt wurde, kann der Benutzer seine Befehle über eine Schaltfläche (Bytes) senden und erhält Antworten vom Server, die ihn in einem Etikett anzeigen.
Die Art der Lösung kam ich mit:
Da wollte ich mein Programm sehr flexibel ich eine Klasse machen geschaffen, um die Kommunikation für die Handhabung, vom Rest des Programmcodes zu trennen.
In dieser Klasse CommunicationTCP habe ich drei Funktionen erstellt.
- an den Server anschließen
- Senden Befehl
- Antwort vom Server empfangen
Das, was es sieht aus wie
.
.
.
using System.Net.Sockets;
//eventually tried declarations like
//TcpClient tcpclnt;
//NetworkStream tcpStream;
namespace MyProgram
{
public partial class CommunicationTCP
{
public static void Connect()
{
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(ServerIP,ServerPORT);
}
public static void TCPSendData()
{
TcpClient tcpclnt = new TcpClient();
NetworkStream netStream = tcpclnt.GetStream();
byte[] sendbytes = Encoding.UTF8.GetBytes("COMMAND");
netStream.Write(sendbytes, 0, sendbytes.Length);
}
public static void TCPGetData()
{
//not yet programmed.
}
}
}
Die Verbindungsfunktion, wenn in aufgerufen wird. Das Senden der Befehle, wie ich zu Beginn gesagt habe, wird vom Benutzer über Tasten gesendet.
Leider funktioniert der obige Code nicht, da die tcpclnt
nur innerhalb ihrer Funktion verfügbar ist. Ich habe verschiedene Definitionen der Funktion und der Deklarationen ausprobiert, aber ohne Erfolg.
Wie kann ich das Programm so ändern, dass die TCP-Verbindung offen bleibt und die Befehle gesendet werden?
Sie müssen dieselbe Instanz von 'TcpClient' für alle Ihre Funktionen verwenden. Machen Sie 'tcpclnt' zu einer Variablen auf Klassenebene anstelle einer lokalen Funktionsvariablen. – wablab