begin process at 2012 02 08 23:27:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Réseau & Internet

 > 

Sockets

 > 

Socket: probleme reception donnée (temp d'attente?)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Socket: probleme reception donnée (temp d'attente?)

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ée dans : buffer, code, probleme, reponse, iphostentry


Répondre à ce message

Sujets en rapport avec ce message

probleme avec code en C [ par dlhote ] BONJOUR a vous je suis debutant en C je suis aller sur le site du zero par mateo,pour comprendre les bases.Mon probleme c est que tout foctionne,avec Probleme de connexion a SQL Server 2008 [ par mbakatre ] Bonsoir à tous, J'ai des problèmes pour me connecter à SQL Server 2008. Quand je tente de me connecter le système me dit qu'il n'arrive pas à se conne probleme avec un textbox [ par dermerzel137 ] Bonjour, Je débute en c# et rencontre un souci avec une textbox. Je développe une WindowsFormApplication, dans laquelle il y a 2 textbox et un bouton Probleme sur le webconfig [ par PascalCmoa ] Bonjour, Je commence à m'arracher les cheveux. Je viens de créer un web service, là pas de problèmes. En mode debug il fonctionne parfaitement. Par c probleme lors de l'ajout d'un element dans une liste [ par tix116 ] bsr; excusez mon ignorance je suis encore débutant [^^sad2] voilà mon problème : j'essaye de créer un tableau de liste et d'ajouter des éléments dan fichier texte [ par piegues007 ] Slt ts l monD.qlq pEut m'aider?Mon probleme est de:1)comment ajouter des élèments dans un fichier texte.j'ai déja essayer le code du genre [code=cs] s Probleme infos fichier copie [ par ledim97 ] Bonjour, Un nouveau sujet pour un nouveau probleme , Je vous explique , Je voudrais avoir des information sur une copie de fichier. Donc je lan 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["


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales