2009-12-23 2 views
0

Je souhaite recevoir des données d'un client. Pour être précis, toutes les données que le client envoie. Mais alors je veux renvoyer des données afin que je ne veuille pas fermer la connexion.Socket.Receive - où est la fin?

Peut-être que c'est déjà tard dans la nuit (au moins en Allemagne) - comment puis-je faire cela? Habituellement, je dirais que je mettrais un point-virgule ou quelque chose comme ça à la fin, mais les protocoles comme HTTP ne le font pas non plus (ou pas?). Comment ça marche là-bas?

Merci, eWolf

Répondre

4

Avec le protocole HTTP, l'en-tête Content-Length est utilisé pour identifier la quantité de données à l'avance.

Vous pourriez faire quelque chose de similaire dans votre protocole.

+0

Content-Length identifie la longueur de réponse .. juste trouvé: La demande est délimitée par CRLF: D * il est * trop tard .. – eWolf

+0

Son non seulement la longueur de réponse, il peut également s'agir de la longueur de requête pour une requête POST. – GBegen

+0

Oh ok c'est logique. – eWolf

1

Recherchez le terminateur nul (0) qui peut être de tailles différentes en fonction du codage des données.

ASCII aura un terminateur nul de 1 octet.

3

Si l'autre extrémité arrête le Socket, l'appel de réception renverra un zéro une fois que toutes les données auront été reçues pour indiquer que la fin du flux a été atteinte. Toutefois, cette condition de fin de flux est permanente et empêche l'autre extrémité d'envoyer plus de données sur le socket. TCP/IP est un protocole de flux qui ne comprend pas la taille d'un message logique/spécifique à une application. Sauf si vous utilisez l'indication de fin de flux mentionnée ci-dessus, vous devez créer vos propres indicateurs dans les données que vous envoyez. Ceci est parfois appelé "cadrage". Par exemple, l'expéditeur peut préfixer les données avec le nombre d'octets qui suivent. Le destinataire lira d'abord ce préfixe et vérifiera que c'est un nombre raisonnable. Ensuite, le récepteur appelle Recevoir en boucle jusqu'à ce que plusieurs octets aient été reçus.

Une bonne information sur l'encadrement est disponible ici: http://nitoprograms.blogspot.com/2009/04/message-framing.html