Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41
Auteur Message
Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Bonjour,

La commande SockeT permet de gérer des "Socket" TCP/IP ce qui peut permettre de se connecter a un serveur ou d'en héberger un.
Pour information, le TCP est extrêmement utilisé dans le Web, les jeux...
Cela donne des avantages aux niveau de la sécurité car aucun mot de passe aura besoin d'être stocké sur le batch mais une IP et un Port.
Les seuls bémol sont que:
    L'infrastructure du logiciel est complexe car il faut un serveur TCP (par exemple DevLand un VPS)
    Son utilisation dans la partie serveur peut est très complexe.


Analyse virus total (version legacy 1.2) (1/56): https://www.virustotal.com/fr/file/4e1d1d1b7415e43c4a1fe99e5bc6d01ef32c0824…

SockeT Reloaded : ftp://149.91.81.61/tsnake41/socket_src/SockeT_R_src.7z
Ou en faisant
Code:
get socket
avec http://batch.xoo.it/t5324-Gestionnaire-de-commandes-externes-outils-batch.h…

Petite information : comme il y a trop de possibilités de customisation, je vous donne uniquement le code source, regardez dans build_scripts et vous comprendrez ^^





Utilisation:
Cette version à le même usage que la version legacy sauf que la syntaxe change.

SockeT.exe a écrit:
SockeT.exe by Astie Teddy
Usage : SockeT -property:value [...]

Primary properties :
m : Module to use (client/server)
host : listening/connecting ip address
port : binding port / connecting port

Exemple :
Code:
SockeT -m:client -host:127.0.0.1 -port:80 -protocol:tcp

Se connecter vers 127.0.0.1:80 par TCP (il y a TCP et NMS)



Envoyer/recevoir un fichier

Code:
:: Send file client made with SockeT.

@Echo off
setlocal EnableDelayedExpansion
set /P IP=Host:

:loop
set /P file=Glisser déposer un fichier ici:
set FileName=%file%
if not exist %file% goto loop
start SockeT -m:client -host:%IP% -port:770

echo %FileName%>>temp
type %file%>>temp
copy temp IN

:: Wait for response
:Wait
ping -w 250 -n 1 1.1.1.1>nul
if not exist OUT goto Wait
echo Réponse du serveur:
type OUT
pause
del Session
goto loop
Code:
@Echo off
setlocal EnableDelayedExpansion
start SockeT -m:server -host:0.0.0.0 -port:770
cd SockeT

:loop
for %%A in (*) do (
   set File=%%A
      if not "!File:~-3!"=="OUT" (
         if not "!File:~-2!"=="IN" (
         call:sub
      )
   
   )
)
ping -w 250 -n 1 1.1.1.1>nul
goto loop

:sub
echo Client trouvé
ping -i 1>nul
set fichier=recu_!random!
copy !File!_OUT ..\recu_%random%
echo Fichier reçu ^(recu_%random%^)>!File!_IN
ping -w 250 -n 1 1.1.1.1>nul
del %File%
goto:EOF

Citation:
Se connecte au serveur et redirige ses "stream" aux fichiers IN et OUT.
SockeT /c <Adresse> <Port>
Met le port en état d'écoute et redirige les "streams" comme ceci pour chaques clients SockeT\#IP#$#Port#_OUT et SockeT\#IP#$#Port#_IN
SockeT /l <Adresse d'écoute> <Port> <MaxClients>

errorlevels:
0: No error
1: Connection failed
2: Invalid arguments


Pour stopper, il suffit simplement de supprimer le fichier "Session".
Pour terminer la connexion avec un client, il faut simplement supprimer son fichier avec son IP et son Port, la sortie est automatiquement supprimée.

Le fonctionnement des IN/OUT est assez simple:
OUT:
Il faut supprimer le fichier OUT après utilisation pour qu'il soit recrée avec le nouveau packet.

IN:
Il faut le remplir quand il n’existe pas, je conseille d'utiliser le copier coller ou une parenthèse.

Avertissement: Dans le cas ou plusieurs instances de SockeT sont dans un même fichier, quand le fichier Session est supprimé, toutes les instances se terminent.
Faire un CD dans un autre dossier pour appeler SockeT sera pris en compte.


Exemple:
Envoyer/recevoir un fichier

Code:
:: Send file client made with SockeT.

@Echo off
setlocal EnableDelayedExpansion
set /P IP=Host:

:loop
set /P file=Glisser déposer un fichier ici:
set FileName=%file%
if not exist %file% goto loop
start "" SockeT /c %IP% 770

echo %FileName%>>temp
type %file%>>temp
copy temp IN

:: Wait for response
:Wait
ping -w 250 -n 1 1.1.1.1>nul
if not exist OUT goto Wait
echo Réponse du serveur:
type OUT
pause
del Session
goto loop
Code:
@Echo off
setlocal EnableDelayedExpansion
mkdir SockeT
start "" SockeT /l 0.0.0.0 770 16
cd SockeT

:loop
for %%A in (*) do (
   set File=%%A
      if not "!File:~-3!"=="OUT" (
         if not "!File:~-2!"=="IN" (
         call:sub
      )
   
   )
)
ping -w 250 -n 1 1.1.1.1>nul
goto loop

:sub
echo Client trouvé
ping -i 1>nul
set fichier=recu_!random!
copy !File!_OUT ..\recu_%random%
echo Fichier reçu ^(recu_%random%^)>!File!_IN
ping -w 250 -n 1 1.1.1.1>nul
del %File%
goto:EOF



Je donne le code source a disposition pour ceux qui veulent, il est sous licence MIT:
Code:
/*
    SockeT by Astie Teddy

    Under MIT/X11 licence.

    Usage:

    SockeT /c <Address> <Port>                          Connect to the server and redirect streams with IN and OUT files.
    SockeT /l <Listening Address> <Port> <MaxClients>  Listen and redirect connections in SockeT\#IP#$#Port#_OUT and SockeT\#IP#$#Port#_IN

    errorlevels:
        0: No error
        1: Connection failed
        2: Invalid arguments
*/

using System;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using System.IO;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace Socket_bat
{
    class Program
    {
        public static Socket socket;
        public static int MaxClient = 8;

        static int Main(string[] args)
        {
            #region Client Mode
            if (args.Length == 3)
                if (args[0] == "/c")
                    using (Ping p = new Ping())
                        if (p.Send(IPAddress.Parse(args[1])).Status == IPStatus.Success)
                            try
                            {
                                socket = new Socket(AddressFamily.Unspecified, SocketType.Stream, ProtocolType.Tcp);
                                socket.Connect(new IPEndPoint(IPAddress.Parse(args[1]), int.Parse(args[2])));
                                File.Create("Session").Close();
                                Task IOTask = new Task(() => InOutTask(socket, "OUT", "IN"));
                                Task c = new Task(() =>
                                {
                                    while (File.Exists("Session"))
                                        Thread.Sleep(250);
                                    File.Delete("OUT");
                                    socket.Dispose();

                                    Environment.Exit(0);
                                });
                                c.Start();
                                IOTask.RunSynchronously();
                                EOS();
                            }
                            catch
                            {
                                Console.WriteLine("Connection impossible.");
                                return 1;
                            }
                        else
                            return 1;
                else return 2;
            #endregion
            #region Listening mode
            else if (args.Length == 4)
                if (args[0] == "/l")
                {
                    IPAddress listeningaddress = IPAddress.Parse(args[1]);
                    int Port = int.Parse(args[2]);
                    if (!int.TryParse(args[3], out MaxClient))
                        MaxClient = 8;

                    List<Tuple<Thread, Socket>> sessions = new List<Tuple<Thread, Socket>>();

                    Socket Listner = new Socket(listeningaddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                    Listner.Bind(new IPEndPoint(listeningaddress, Port));
                    Listner.Listen(3);

                    Directory.CreateDirectory("SockeT");
                    File.Create("Session").Close();

                    Task Checker = new Task(() =>
                    {
                        while (true)
                        {
                            Stack<Tuple<Thread, Socket>> toRemove = new Stack<Tuple<Thread, Socket>>();

                            foreach (var ts in sessions)
                                switch (ts.Item1.ThreadState)
                                {
                                    case ThreadState.Stopped:
                                    case ThreadState.Aborted:
                                        ts.Item1.Abort();
                                        toRemove.Push(ts);

                                        try
                                        {
                                            ts.Item2.Close();
                                        }
                                        catch{}
                                        break;
                                }

                            foreach (var ts in toRemove)
                            {
                                sessions.Remove(ts);
                            }

                            if (!File.Exists(@"Session"))
                                Environment.Exit(3);
                            Thread.Sleep(250);
                        }
                    });
                    Checker.Start();

                    while (true)
                    {
                        if (sessions.Count != MaxClient)
                        {
                            Socket Client = Listner.Accept();
                            IPAddress address = ((IPEndPoint)Client.RemoteEndPoint).Address;
                            int port = ((IPEndPoint)Client.RemoteEndPoint).Port;

                            Thread t = new Thread(() =>
                            {
                                File.Create(@"SockeT\" + address + "$" + port).Close();
                                Thread t2 = new Thread(() => InOutTask(Client, @"SockeT\" + address + "$" + port + "_OUT", @"SockeT\" + address + "$" + port + "_IN"));
                                t2.Start();

                                while (!(t2.ThreadState == ThreadState.Aborted || t2.ThreadState == ThreadState.Stopped) && File.Exists(@"SockeT\" + address + "$" + port))
                                    Thread.Sleep(250); /// Attend 250ms pour éviter une charge importante sur le CPU.

                                // Dans ce cas, l'interface demande a la session de se terminer.

                                // Si les fichiers de stream existent, on les supprimes.
                                if (File.Exists(@"SockeT\" + address)) File.Delete(@"Socket\" + address);
                                if (File.Exists(@"SockeT\" + address + "$" + port + "_OUT")) File.Delete(@"Socket\" + address + "$" + port + "_OUT");

                                try { t2.Abort(); } catch { }
                            });
                            t.Start();
                            sessions.Add(new Tuple<Thread, Socket>(t, Client));

                        }
                        Thread.Sleep(250);
                    }
                }
                else
                    return 2;
            else
                return 2;
            #endregion
            return 0;
        }

        public static void Dispose(Tuple<Task, Socket> ts)
        {
            ts.Item1.Dispose();
            ts.Item2.Dispose();
        }

        public static void InOutTask(Socket s, string OutPath, string InPath)
        {
            InOutTask(s, new FileInfo(OutPath), new FileInfo(InPath));
        }
        public static void InOutTask(Socket s, FileInfo Out, FileInfo In)
        {
            CancellationToken token = new CancellationToken();

            // Output task.
            Task OutTask = new Task(() =>
            {
                byte[] buffer = new byte[s.ReceiveBufferSize];
                while (true)
                    if (!Out.Exists)
                        try
                        {
                            // Démarage de la l'écriture dans OUT.
                            int Lenght = s.Receive(buffer);
                            // Packet reçu !
                            List<byte> buf = new List<byte>(buffer).GetRange(0, Lenght);
                            FileStream stream = null;
                            bool state = true;

                            while (state && s != null)
                                try
                                {
                                    stream = new FileStream(Out.FullName, FileMode.CreateNew);
                                    state = false;
                                }
                                catch
                                {
                                    state = true;
                                    Thread.Sleep(250);
                                }

                            if (s == null)
                                token = new CancellationToken(true);

                            stream.Write(buf.ToArray(), 0, buf.Count);
                            stream.Close();
                        }
                        catch (SocketException) { token = new CancellationToken(true); }
                        catch (ObjectDisposedException) { token = new CancellationToken(true); break; }
                        catch (Exception e) { token = new CancellationToken(true); Console.WriteLine(e.ToString()); }
            }, token);

            // Input task.
            Task InTask = new Task(() =>
            {
                byte[] buffer = new byte[s.SendBufferSize];

                while (true)
                    if (File.Exists(In.FullName))
                        try
                        {
                            buffer = File.ReadAllBytes(In.FullName);
                            s.Send(buffer);
                            In.Delete();
                        }
                        catch (IOException) { }
                        catch (SocketException) { token = new CancellationToken(true); }
                        catch (ObjectDisposedException) { token = new CancellationToken(true); break;  }
                        catch (Exception e) { token = new CancellationToken(true); Console.WriteLine(e.ToString()); }
                    else
                        Thread.Sleep(250);
            }, token);

            OutTask.Start();
            InTask.Start();

            Task.WaitAny(new[] { InTask, OutTask }, token);

            InTask.Dispose();
            OutTask.Dispose();
            s.Close();
        }
        public static void EOS()
        {
            Console.WriteLine("Fin de la transmission.");
        }
    }
}




Dernière édition par TSnake41 le Jeu 21 Juil 2016 - 15:17; édité 13 fois

______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Lien mort mis a jour.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Une mise à jour de stabilité en particulier pour le client.

Mise à jour 1.1 :
Toutes ces mises à jour concernent uniquement le client.
FIX: Correction de la fermeture de session.
FIX: Correction de divers problèmes de stabilité.

ADD: Suppression du fichier OUT lors de la fermeture de la session (comme pour le serveur).




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Est-il possible de se connecter sur un serveur FTP via Socket ?

Et est-il obligatoire de posséder un serveur via Socket pour transférer des fichiers et/ou des données ?

@ ++ Wink Okay




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Xenoxis a écrit:
Est-il possible de se connecter sur un serveur FTP via Socket ?

Oui, mais il faut inclure le format du ftp, c'est assez intéressant à faire, le principal soucis que tu peut avoir est pour envoyer/recevoir des fichiers car c'est pas toujours si simple avec les modes passifs et actifs.
Le FTP est un peut une console, on envoie des lignes, et on reçois la sortie, pour t'aider : https://fr.wikipedia.org/wiki/File_Transfer_Protocol https://fr.wikipedia.org/wiki/Liste_des_commandes_ftp https://en.wikipedia.org/wiki/List_of_FTP_server_return_codes
J'avais fait un test et on pouvais interagir avec le ftp via une console.

Xenoxis a écrit:
Et est-il obligatoire de posséder un serveur via Socket pour transférer des fichiers et/ou des données ?

En réalité, il faut savoir que un serveur web est lui même basé d'un socket (tcp), de même pour le serveur ftp, donc la présence d'un socket ne pose pas trop de problème car beaucoup de programme réseau utilise un Socket TCP (Minecraft, Apache (http), TXCobalt ...).




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Salut ^^
Tu pourrais faire un example concret, comme par example envoyer un ficher à un autre ordinateur distant via Socket ?

Je voulais juste voir si je pouvais créer un truc sympas avec Wink




______________________________________________________
Visiter le site web du posteur
Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Skywalker a écrit:
Salut ^^
Tu pourrais faire un example concret, comme par example envoyer un ficher à un autre ordinateur distant via Socket ?

Je voulais juste voir si je pouvais créer un truc sympas avec Wink


Après il a fait un exemple, mais c'est vrai qu'il manque quelque chose ...




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Salut TS, j'ai un soucis, et j'aimerais savoir si socket serais donc capable de résoudre mon probleme :

-J'ai creer un jeu en batch
-utilisant batbox & mon propre client d'envoie d'information par packets
-le system d'envoie de packet est, un peut lent (~65 ms), j'envoie des fichiers nomé aléatoirement dans le serveur local, (\\NOMPC\users\public\tmp\packets ou \\IP\users\..)
-En plus qu'il soit lent, il m'affiche des erreur parfois incompréhensible, bref un client FAIL
-Le jeu doit tourner a 15 fps minimum, j'hésite a utiliser un thread pour dire les coords de mon personnage, ou de perdre des fps + les infos reçues sur les coords des autres joueurs

10 fps est déjà suffisant,

donc, est ce que socket pourrais m'aider a optimiser mes FPS ( rapide entre serveur et client (moin de 50 ms pour l'allé ET le retour)) +SockeT est un executable Léger?

Okay



Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
lb999 a écrit:
Salut TS, j'ai un soucis, et j'aimerais savoir si socket serais donc capable de résoudre mon probleme :

-J'ai creer un jeu en batch
-utilisant batbox & mon propre client d'envoie d'information par packets
-le system d'envoie de packet est, un peut lent (~65 ms), j'envoie des fichiers nommé aléatoirement dans le serveur local, (\\NOMPC\users\public\tmp\packets ou \\IP\users\..)
-En plus qu'il soit lent, il m'affiche des erreur parfois incompréhensible, bref un client FAIL
-Le jeu doit tourner a 15 fps minimum, j'hésite a utiliser un thread pour dire les coords de mon personnage, ou de perdre des fps + les infos reçues sur les coords des autres joueurs

10 fps est déjà suffisant,

donc, est ce que socket pourrais m'aider a optimiser mes FPS ( rapide entre serveur et client (moin de 50 ms pour l'allé ET le retour)) +SockeT est un executable Léger?

Okay


Ton systeme peut fonctionner avec SockeT (pour le client) à la place de mettre les packets dans tmp\packets, tu les mettra directement dans le fichier IN.


Pour la vitesse, c'est de base à 250 ms (changeable) faut savoir que SockeT est OpenSource donc tu peut entièrement le modifier si tu veut.

Si tu veut, voila une version avec 10ms de temps d'échange :
Téléchargement : https://up1.ca/#8rsphnCvGYmadNd90bB-NA
Code:
[lang=csharp]/*
    SockeT by Astie Teddy

    Under MIT/X11 licence.

    Usage:

    SockeT /c <Address> <Port>                          Connect to the server and redirect streams with IN and OUT files.
    SockeT /l <Listening Address> <Port> <MaxClients>  Listen and redirect connections in SockeT\#IP#$#Port#_OUT and SockeT\#IP#$#Port#_IN

    errorlevels:
        0: No error
        1: Connection failed
        2: Invalid arguments
*/

using System;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using System.IO;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace Socket_bat
{
    class Program
    {
        public static Socket socket;
        public static int MaxClient = 8;
        public const int UpdateTime = 10;

        static int Main(string[] args)
        {
            #region Client Mode
            if (args.Length == 3)
                if (args[0] == "/c")
                    using (Ping p = new Ping())
                        if (p.Send(IPAddress.Parse(args[1])).Status == IPStatus.Success)
                            try
                            {
                                socket = new Socket(AddressFamily.Unspecified, SocketType.Stream, ProtocolType.Tcp);
                                socket.Connect(new IPEndPoint(IPAddress.Parse(args[1]), int.Parse(args[2])));
                                File.Create("Session").Close();
                                var IOTask = new Task(() => InOutTask(socket, "OUT", "IN"));
                                Task c = new Task(() =>
                                {
                                    while (File.Exists("Session"))
                                        Thread.Sleep(UpdateTime);
                                    File.Delete("OUT");
                                    socket.Dispose();

                                    Environment.Exit(0);
                                });
                                c.Start();
                                IOTask.RunSynchronously();
                                EOS();
                            }
                            catch
                            {
                                Console.WriteLine("Connection impossible.");
                                return 1;
                            }
                        else
                            return 1;
                else return 2;
            #endregion
            #region Listening mode
            else if (args.Length == 4)
                if (args[0] == "/l")
                {
                    IPAddress listeningaddress = IPAddress.Parse(args[1]);
                    int Port = int.Parse(args[2]);
                    if (!int.TryParse(args[3], out MaxClient))
                        MaxClient = 8;

                    var sessions = new List<Tuple<Task, Socket>>();

                    var Listner = new Socket(listeningaddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                    Listner.Bind(new IPEndPoint(listeningaddress, Port));
                    Listner.Listen(3);

                    Directory.CreateDirectory("SockeT");
                    File.Create("Session").Close();

                    Task Checker = new Task(() =>
                    {
                        while (true)
                        {
                            foreach (Tuple<Task,Socket> ts in sessions)
                                if (ts.Item1.IsFaulted||ts.Item1.IsCompleted||ts.Item1.IsCanceled)
                                    sessions.Remove(ts);

                            if (!File.Exists(@"Session"))
                                Environment.Exit(3);
                            Thread.Sleep(UpdateTime);
                        }
                    });
                    Checker.Start();

                    while (true)
                    {
                        if (sessions.Count != MaxClient)
                        {
                            Socket Client = Listner.Accept();
                            IPAddress address = ((IPEndPoint)Client.RemoteEndPoint).Address;
                            int port = ((IPEndPoint)Client.RemoteEndPoint).Port;

                            var t = new Task(() =>
                            {
                                File.Create(@"SockeT\" + address + "$" + port).Close();
                                var t2 = new Task(() => InOutTask(Client, @"SockeT\" + address + "$" + port + "_OUT", @"SockeT\" + address + "$" + port + "_IN"), TaskCreationOptions.AttachedToParent);
                                t2.Start();

                                while (!(t2.IsCompleted || t2.IsCanceled || t2.IsFaulted) && File.Exists(@"SockeT\" + address + "$" + port))
                                    Thread.Sleep(25); /// Attend 25ms pour éviter une charge importante sur le CPU.

                                // Dans ce cas, l'interface demande a la session de se terminer.

                                // Si les fichiers de stream existent, on les supprimes.
                                if (File.Exists(@"SockeT\" + address))
                                    File.Delete(@"Socket\" + address);
                               
                                if (File.Exists(@"SockeT\" + address + "$" + port + "_OUT"))
                                    File.Delete(@"Socket\" + address + "$" + port + "_OUT");

                                try { t2.Dispose(); } catch { }
                            });
                            t.Start();
                            sessions.Add(new Tuple<Task, Socket>(t, Client));
                        }
                        Thread.Sleep(UpdateTime);
                    }
                }
                else
                    return 2;
            else
                return 2;
            #endregion
            return 0;
        }

        public static void Dispose(Tuple<Task,Socket> ts)
        {
            ts.Item1.Dispose();
            ts.Item2.Dispose();
        }

        public static void InOutTask(Socket s, string OutPath, string InPath)
        {
            InOutTask(s, new FileInfo(OutPath), new FileInfo(InPath));
        }
        public static void InOutTask(Socket s, FileInfo Out, FileInfo In)
        {
            CancellationToken token = new CancellationToken();

            // Output task.
            Task OutTask = new Task(() =>
            {
                byte[] buffer = new byte[s.ReceiveBufferSize];
                while (true)
                    if (!Out.Exists)
                        try
                        {
                            // Démarage de la l'écriture dans OUT.
                            int Lenght = s.Receive(buffer);
                            // Packet reçu !
                            List<byte> buf = new List<byte>(buffer).GetRange(0, Lenght);
                            FileStream stream = null;
                            bool state = true;

                            while (state)
                                try
                                {
                                    stream = new FileStream(Out.FullName, FileMode.CreateNew);
                                    state = false;
                                }
                                catch
                                {
                                    state = true;
                                    Thread.Sleep(UpdateTime);
                                }

                            stream.Write(buf.ToArray(), 0, buf.Count);
                            stream.Close();
                        }
                        catch (SocketException) { token = new CancellationToken(true); }
                    catch (Exception e) { token = new CancellationToken(true); Console.WriteLine(e); }
            });

            // Input task.
            Task InTask = new Task(() =>
            {
                byte[] buffer = new byte[s.SendBufferSize];

                while (true)
                    if (File.Exists(In.FullName))
                        try
                        {
                            buffer = File.ReadAllBytes(In.FullName);
                            s.Send(buffer);
                            In.Delete();
                        }
                        catch (IOException) { }
                        catch (SocketException) { token = new CancellationToken(true); }
                        catch (Exception e) { token = new CancellationToken(true); Console.WriteLine(e); }
                    else
                        Thread.Sleep(UpdateTime);
            });

            OutTask.Start();
            InTask.Start();

            Task.WaitAny(new[] { InTask, OutTask }, token);

            InTask.Dispose();
            OutTask.Dispose();
            s.Close();
        }
        public static void EOS()
        {
            Console.WriteLine("Fin de la transmission.");
        }
    }
}





______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Merci TS, t'es les Meilleur des Meilleurs!
Arrow SockeT va surement Corriger TOUT mes problemes Okay
Après je m'arrangerais pour apprendre a utiliser SockeT, Mort de Rire

Salut! Okay



Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
It´s amazing Okay



Visiter le site web du posteur
Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Mise à jour 1.2 !

[SERVER] FIX: Correction d'un bug de Session fantôme #httpBat




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Mise à jour vers SockeT Reloaded :
-> Ce n'est pas une pure mise à jour mais une réécriture du code

La syntaxe change, il y a plus de fonctionnalités, moins de bugs, plus stable et modulaire, et "enfin" 100% compatible XP.
Bref, je pense faire un carton plein.Euh, j'ai rien dis moi ^^

Téléchargement : https://1drv.ms/f/s!Ao64nlgUfTexg_E5GN3KWSnsVtstlQ
Voir le début pour plus de détails.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 
Je viens de commencer le premier tuto pour cette commande : http://batch.xoo.it/t5307-SockeT-D-butant-Les-bases-de-SockeT.htm
J'espère que ça vous plaira.

Pour le moment, il y a un bug avec le transfert de données TCP, donc utilisez le NMS à la place.
Bug fixé au plafond.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Message [STABLE][C#] SockeT Reloaded - TCP+NMS en batch - TSnake41 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch