Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Socket: probleme reception donnée (temp d'attente?) [ Réseau & Internet / Sockets ] (warenbe)

lundi 2 octobre 2006 à 23:47:36 | Socket: probleme reception donnée (temp d'attente?)

warenbe

Membre Club

bonjour
(bonsoir plutot)

avant de me coucher j'aimerai poser une question
j'ai un bout de code qui me permet de recuperer des infos sur un serveur
pour le moment ce code est en test. il n'est pas fini
mais il marche

j'aimerai avoir votre avis sur deux choses
1: est il "correct" (propre.) il fonctionne mais je pense qu'il n'est pas tellement optimisé
je developpe pour pocket pc donc en c# avec le .net compact framework. mais toutes les classes que j'utilise existent aussi dans le .net framework "normal"

2: j'ai un probleme:
je suis obligé de mettre un thread.sleep(2000) sinon je ne reçoit pas la reponse du serveur (en l'occurence pour FTP ou alors un GET sur google.fr)
comment puis je eviter ça pour que je ne perde pas de temps pour rien et que j'evite de bloquer le pocket pc?


voici le code:

this .s = newSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType .Tcp);
IPHostEntry IPhostentry = Dns .GetHostEntry(sServeur);
IPAddress [] IPadress= IPhostentry.AddressList;
IPEndPoint EndPoint = newIPEndPoint (IPadress[0], iPort);
this .s.Connect(EndPoint);

if (!this .s.Connected)
{
   
return "Erreur impossible de se connecter à: " + EndPoint.Address.ToString();
}
else
{
   
byte[] buffer = System.Text.Encoding .UTF8.GetBytes(sParametres);
   
this .s.Send(buffer);
   
System.Threading. Thread .Sleep(2000);
   
string reponse = "" ;

while (this .s.Available > 0)
{
   int iSizeReponse = this .s.Available;
   byte[] buffer_reponse = newbyte [iSizeReponse];
   int count = this .s.Receive(buffer_reponse);
   reponse = reponse + Encoding .UTF8.GetString(buffer_reponse, 0, buffer_reponse.Length);
}

this
.s.Close();

if
(reponse.Length > 0)
{
   return reponse;
}
else
{
   return "null" ;
}


merci d'avance

warenbe


la société de consommation porte mal son nom car un con fait rarement une sommation avant de dire une connerie en société


mardi 3 octobre 2006 à 11:11:55 | Re : Socket: probleme reception donnée (temp d'attente?)

leprov

je vois que tu utilise UTF8 pour l'encoding...a priori ca ne fonctionne pas...jimagine que tu l'utilise pour pouvoir passer les caractères accentués...fait un test, tes caractères accentués sont perdus.... en compact framework, la seule solution pour utiliser l'ascii étendu est d'utiliser Encoding.GetEncoding(0) Le problème de cette solution est que ton pocket pc DOIT etre configuré en francais. si un utilisateur de ton application installe son pocket pc en anglais, encoding.GetEncoding(0) retourne Encoding.ASCII. Si l'installation est en francais, cela retourne Encoding.GetEncoding("iso-8859-1") pourquoi ne pas utiliser directement Encoding.GetEncoding("iso-8859-1") ? et bien en framework normal pas de problème, mais en CF, cela lève une notSupportedException (ou une exception de ce style).

mardi 3 octobre 2006 à 11:53:26 | Re : Socket: probleme reception donnée (temp d'attente?)

warenbe

Membre Club
mon pocket pc est en anglais (j'ai changé la rom pour avoir windows 2003 SE) en fait les commandes passent sans probleme pour le moment car je n'ai pas d'accent... mais ce que je trouve un peu con c'est de devoir faire un thread sleep avant de recevoir la reponse n'y a t il pas d'autre moyen? sinon pour l'encoding je regarderai si la librairie OpenNETCF dispose d'autre classe pour encoder :) merci du conseil ^^

la société de consommation porte mal son nom car un con fait rarement une sommation avant de dire une connerie en société

mardi 3 octobre 2006 à 12:38:09 | Re : Socket: probleme reception donnée (temp d'attente?)

MoDDiB

Pour eviter ton Thread.Sleep il faut que tu fasses ton s.Receive(buffer_reponse); juste après le send car cette méthode est bloquante; en contre partie tu ne connaitra pas la taille du packet donc soit : tu crées un tableau plus grand soit tu envoies d'abord la taille du tableau puis le packet lui même.

mardi 3 octobre 2006 à 12:56:56 | Re : Socket: probleme reception donnée (temp d'attente?)

warenbe

Membre Club
voila la solution pour laquelle j'ai opté: s.send(buffer) j'initialise un timer. celui ci se declenchera 3 secondes apres je le lance ensuite je cree une boucle while je reste dans cette boucle tant que s.avalaible est a 0 des que s.avalaible est superieur a 0 j'arette le timer. si le timer arrive a terme avant son arret je dis que c'est un timeout: le serveur n'a rien repondu! je rentre dans une boucle while ensuite je cree un tableau de bytes equivalent a s.avalaible. je met dans ce tableau s.receive(tableau) je copie le contenu de ce tableau dans un string qui contiendra la reponse la boucle while test s.avalaible. si c'est encore > à 0 alors des données sont encore en attente donc je recupere et je rajoute au string qui contient la reponse des que c'est a 0 je retourne la reponse... c'est correct? en tout cas ça marche super :)

la société de consommation porte mal son nom car un con fait rarement une sommation avant de dire une connerie en société

mardi 3 octobre 2006 à 12:57:45 | Re : Socket: probleme reception donnée (temp d'attente?)

warenbe

Membre Club
au fait desolé pour les retour à la ligne manquant mais ce site ne supporte pas opera: ils deteste ses retours à la ligne :( et la textbox classique ne marche pas :( bref

la société de consommation porte mal son nom car un con fait rarement une sommation avant de dire une connerie en société



Cette discussion est classé dans : buffer, code, probleme, reponse, iphostentry


Répondre à ce message

Sujets en rapport avec ce message

Maitriser les packets TCP [ par bucherb ] Hello!J'aurais besoin de qqun qui puisse répondre à ma question existentielle suivante:Mais bon sang, il faut faire quoi pour obtenir les seconds paqu probleme de code ascii sous linux [ par kamalh07 ] Je suis sous linux et avec la console je n'arrive pas a afficher les caractere speciaux comme le è,é...j'ai essayer ceci sans resultat:#include "stdio Quel est le meilleur moyen de gerer un buffer ... [ par Hawkmoon ] Bon voila mon probleme : je connecte une socket sur un server irc mais avec le code suivant j'arrive pas a gerer les reponses du server dans un buffer Probleme DropDownList [ par jdaviaud ] J'ai un petit pb avec un dropdownlist.Quand je veux en récupérer la valeur de la ligne sélectionnée, j'utilise le code suivant :string famille = DropD flux et buffer avec directshow [ par gwenp68 ] Salut a tous ! En fait voila, j'ai reussi a recupérer en live un flux streaming depuis une cam IP et a l'afficher nikel. Le probleme, c'est qu'il me f Regex probleme [ par Nicodelphi ] bonjour voila j'ai un patit probleme jaimerai pouvoir verifier si une chaine de caractere contient des chiffre je suppose qu'il faut utiliser regex ma probleme avec DataGridViewRow [ par rudhf ] bonjour,j'essaye d'executer un code pour exporter un datagridview vers excel, le code se trouve ici. Mon probleme avec datatable [ par rudhf ] bonjourj'ai un petit problème avec les datatable.j'ai trois tables contenues dans le même datasettable1 contient  les colonnes : code et poste (les de probleme datarow [ par ducker88 ] Bonjour a tous, voila mon probleme, je souhaiterai afficher la valeur recuperé dans un dataset. Voici mon code :    DataRow row = dataSet11.Tables[" Probleme upload source [ par pkmnlio ] Bonjour,J'essaye d'uploader l'archive ZIP contenant la source de mon code, mais a chaque fois, j'ai un retour d'erreur 500.J'aimerai savoir a quoi cel


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.