Bonjour,
J'ai un souci avec mon code de réception d'infos d'un serveur, en utilisant le type Socket.
En gros, j'envoie une string XML (en POST) à un serveur SQL, et il devrait me renvoyer une liste de clients (par ex) ...
Mais j'ai un souci, avec le buffer, je l'ai déclaré en 1024, avec un while >0 mais je pense que dans la string de sortie, lorsqu'il doit concaténer la string test dans le while lorsque le buffer byte2 est plein (voir code en dessous) il doit "laisser passer des infos" pendant le moment où il concatène et le moment où il va re-recevoir les données, car dans le fichier de résultat j'ai des vides parfois (quand y a le souci) et donc la génération du XML résultat ne passe pas.
Voilà mon code :
La partie en gras ...
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
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 Socket m_socListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { System.Net.IPAddress ipAdd = System.Net.IPAddress.Parse(adresse); System.Net.IPEndPoint remoteEP = new System.Net.IPEndPoint(ipAdd, port); m_socListener.Connect(remoteEP); try { byte[] byte2 = new byte[1024]; String test = ""; byte[] byData = System.Text.Encoding.ASCII.GetBytes(last); int i = m_socListener.Send(byData); if (i > 0) { while (m_socListener.Available == 0) ; while (m_socListener.Receive(byte2, 1024, SocketFlags.None) > 0) { test += System.Text.Encoding.ASCII.GetString(byte2); } StreamWriter ecr = new StreamWriter("C:\\Users\\user\\Desktop\\sqldeveloper\\sqldeveloper\\test.txt"); ecr.Write(test); ecr.Close(); System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.LoadXml(test); [...] else { m_socListener.Close(); return "false"; } } else { m_socListener.Close(); return "Erreur d'envoi des données !"; } } catch (SocketException se) { m_socListener.Close(); return se.Message; } } catch (SocketException se1) { return "Le serveur ne répond pas. Veuillez nous excuser pour ce désagrément. L'erreur renvoyée est : " + se1.Message; }
J'ai cherché, mais on peut pas avoir de buffer dynamique ... donc je vois pas pourquoi j'ai ce souci lorsque j'exécute la page asp qui doit afficher le tableau après (génération du XML avec un LoadXML):
Si je change la taille du buffer et de byte2, j'ai l'erreur ailleurs, donc ça vient de là, mais je comprends pas !La balise de début 'date' sur la ligne 107 à la position 2 ne correspond pas à la balise de fin de 'desc'. Ligne 109, position 57.
Ou alors c'est lequi doit poser soucis ? (ca serait autre chose que du ASCII...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part System.Text.Encoding.ASCII.GetBytes(last)
Merci d'avance !![]()
Partager