1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
public void Messageecrit(string message)
{
try
{
// pas d'écriture si pas connecté au client
if (!client.Connected)
{
if (!Connect()) return;
}
try
{
byte[] outstream = System.Text.Encoding.ASCII.GetBytes(message);
client.GetStream().Write(outstream, 0, outstream.Length);
}
catch
{
}
}
catch
{
}
}
/// <summary>
/// Ouvre la connection IP vers le client et lance la scrutation des flux entrants
/// </summary>
public bool Connect()
{
if (!IPAddress.TryParse(sAdresse_IP, out ipaddr)) AddrIsValid = false;
//this.port = iPort;
client.SendTimeout = 5000;
client.ReceiveTimeout = 5000;
IAsyncResult ar;
if (AddrIsValid == false) return false;
// connection
try
{
// tente une connection
ar = client.BeginConnect(sAdresse_IP, iPort, null, null);
}
catch (Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
return false;
}
//attent 1 seconde
bool Success = ar.AsyncWaitHandle.WaitOne(1000, false);
// pas de lecture si pas connecté au client
if (!client.Connected) return false;
try
{
// lancement de la méthode asynchrone de lecture des flux entrants
client.GetStream().BeginRead(inStream, 0, inStream.Length, Fluxentrant, null);
return true;
}
catch (Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
return false;
}
}
/// <summary>
/// procédure appelé lors d'un flux entrant
/// </summary>
/// <param name="result"></param>
private void Fluxentrant(IAsyncResult result)
{
if (client != null)
{
int nbOctetsLus;
try
{
//Affectation du nombre d'octets disponible à la fin de lecture de l'opération asynchrone
nbOctetsLus = client.GetStream().EndRead(result);
}
catch (Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
nbOctetsLus = 0;
}
if (nbOctetsLus != 0)
{
// converti les octets lus en chaine de caractère
string returndata = System.Text.Encoding.ASCII.GetString(inStream, 0, nbOctetsLus);
// on ajout les caractères reçus aux éventuelles trames déjà reçu précédemment
TramesRecues += returndata;
DecompositionMessagesReçus();
}
else
{
bEtat = false;
//Console.WriteLine("Etat=false");
change();
}
// relance l'écoute des flux entrants suivants
try
{
if (client.Connected)
{
IAsyncResult ar = client.GetStream().BeginRead(inStream, 0, inStream.Length, Fluxentrant, null);
}
}
catch (Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
}
}
} |
Partager