Je voulais jeter un oeil sur la communication TCP en C#. J'ai déjà appris avec des programmes simples pour recevoir et envoyer via TCP. Cependant, je veux aller un peu plus loin. --EDIT: Les programmes simples ont tous un point commun: ouvrir la connexion TCP, envoyer ou recevoir et fermer la connexion. Si nécessaire, ils recommencent à zéro. Mais ce n'est pas ce que j'ai en tête pour mon programme. EDIT--Accès à une connexion TCP depuis la fonction. C#
Ce que je veux faire:
J'ai une forme avec un bouton qui établit une connexion à un serveur. (Le serveur est donné et fonctionne correctement.) Une fois la connexion établie, l'utilisateur peut envoyer ses commandes via un bouton (octets) et reçoit les réponses du serveur qui les affiche dans une étiquette.
Le genre de solution que je suis venu avec:
Depuis que je voulais faire mon programme très flexible, je créé une classe pour gérer la communication, la séparant du reste du code du programme.
Dans cette classe CommunicationTCP j'ai créé trois fonctions.
- Connexion au serveur
- Envoi commande
- de recevoir une réponse du serveur
Ce qu'il ressemble à ce qu'il
.
.
.
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.
}
}
}
La fonction de connexion est appelée lorsque dans . L'envoi des commandes, comme je l'ai dit au début, est envoyé par l'utilisateur sur des boutons. Malheureusement, le code ci-dessus ne fonctionne pas car le tcpclnt
n'est disponible que dans leur fonction. J'ai essayé différentes définitions de la fonction et des déclarations mais sans succès.
Comment puis-je modifier le programme afin que la connexion tcp reste ouverte et que les commandes soient envoyées?
Vous devez utiliser la même instance de 'TcpClient' sur toutes vos fonctions. Faites du 'tcpclnt' une variable de niveau classe au lieu d'une variable de fonction locale. – wablab