Bonjour,
J'ai un problème de conception au niveau de l'utilisation des sockets je fais un petite application client/serveur toute simple mon serveur se met bien écoute et des qu'il reçoit des données enclenche la fonction recieve. Le problème c'est que je suis obligé de déclarer un tableau de byte plus grand que le message que j'envoie pour réceptionner les données et ensuite de refaire une boucle pour avoir un tableau de la taille exacte. Ma question est de savoir s'il y a une façon plus jolie/correct pour la réception des données. Je met mon code ci-dessous.
Merci par avance
Code serveur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Socket sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sk.Bind(new IPEndPoint(Dns.GetHostEntry("localhost").AddressList[0], 1031)); sk.Listen(10); Socket sk2 = sk.Accept(); byte[] tb = new byte[100]; byte[] tbf = new byte[sk2.Receive(tb, tb.Length, SocketFlags.None)]; for (int i = 0; i < tbf.Length; i++) tbf[i] = tb[i]; File.WriteAllBytes(@"c:\test2.txt", tbf);
Code client
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public void test() { Socket sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sk.Connect("localhost", 1031); String s = "coucou du client"; byte[] tb = ASCIIEncoding.Default.GetBytes(s); sk.Send(tb, tb.Length, SocketFlags.None); //sk.SendFile(@"c:\test.txt"); sk.Close(); }
Partager