Recevoir paquet par paquet de données TCP socket?
J'ai un socket tcp sur lequel je recevoir des flux vidéo. Je veux recevoir des données de paquet par paquet de socket de sorte que je pouvais enlever l'en-tête de paquet et ne conserver que les données de flux. Comment puis-je faire cela??
toute aide sera appréciée.
Qu'entendez-vous par "paquet"? Si tu parles de paquets IP, c'est déjà fait pour vous. Ou voulez-vous dire que votre vidéo en streaming de protocole utilise un niveau supérieur de paquets qu'il envoie sur TCP?
OriginalL'auteur Ali Ahmed | 2011-06-07
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas.
TCP
ne fonctionne pas avec les paquets /messages etc.TCP
fonctionne avec octets. Vous obtenez un flux d'octets. Le problème est qu'il n'y a aucune garantie reagarding le nombre d'octets que vous obtiendrez à chaque fois que vous lisez à partir d'une prise. La manière habituelle de le gérer:Votre message pourrait être:
Ce que vous devrez faire est de lire les 4 octets et puis lire autant que ces 4 octets de vous dire. Ensuite, vous serez en mesure de bande de l'en-tête et d'obtenir les données.
tap
interface (OpenVPN a même un windows appuyez sur l'interface), de mettre en œuvre sa propre pile de protocole TCP, et de fournir une API avecSTREAM
visibilité de paquets; mais c'est beaucoup de travail.Mike Pennington Ou de l'utilisation
SCTP
. Mise en œuvre d'une pile TCP est à bien des égards plus difficile que la mise en œuvre de tout le reste dans un système d'exploitation.d'accord... c'est pourquoi j'ai dit que c'est "beaucoup de travail" 🙂
OriginalL'auteur cnicutar
TCP est un protocole de streaming. Vous obtenez octets sans limites de message. La solution est de tampon toutes vos lectures et extrait de processus et de la vidéo complète de paquets à partir de la mémoire tampon.
Algorithme:
recv()
de la mémoire tampon et d'aller à #2.Ce qu'est un "paquet complet" contient doivent être définis par le protocole de streaming vidéo.
OriginalL'auteur Mark Tolonen
TCP est un protocole de flux et il n'a pas de garantie que lorsque vous appelez socket fonction de lecture vous recevrez un paquet complet. UDP ou SCTP sont paquet axé sur les protocoles et garantie. Pour TCP, vous pouvez obtenir une partie du paquet ou quelques paquets à la fois. Vous devez construire votre propre protocole d'application sur le dessus de TCP et de fragment/défragmenter manuellement les messages.
OriginalL'auteur Zuljin
Comme d'autres l'ont mentionné, le protocole TCP est un protocole de streaming. Cela signifie à partir d'une API point de vue, il n'y a pas de notion de "paquet". En tant qu'utilisateur, tout ce que vous pouvez attendre d'un flux de données.
En interne, le protocole TCP briser le flux de données en segments qui peuvent être placés dans des paquets IP. Ces paquets seront envoyés avec les données de contrôle sur IP, à l'extrémité distante. L'extrémité distante de recevoir tous ces paquets IP. Il peut ignorer certains paquets IP (dans le cas de doublons), réorganiser les paquets ou de retenir des données jusqu'au début de paquets sont arrivés. Tout cela est interne à TCP sens le concept d'un "paquet" est dénuée de sens.
Vous pourriez être en mesure d'utiliser les sockets raw pour recevoir les premières paquets IP, mais cela signifie que vous aurez à remettre sur pied une grande partie de la pile TCP (comme l'envoi d'accusés de réception et réglage de la taille de la fenêtre) pour obtenir le distant à exécuter correctement. Vous ne voulez pas le faire.
UDP, d'autre part, est un protocole de datagramme. Cela signifie que l'utilisateur soit conscient de la façon dont les données sont envoyées sur le réseau. Si le concept de paquets ou datagrammes sont importants pour vous, vous aurez besoin pour construire votre propre protocole au-dessus d'UDP.
OriginalL'auteur doron
Êtes-vous assez sûr de cette approche? A mon avis, ces "prétraitement" vous fera découvrir une charge supplémentaire sur le système. Et bien sûr, cela est géré par une couche inférieure (Lire à propos du modèle OSI) de sorte qu'il n'est pas facile de changer. Notez que la plupart des protocoles de streaming sont déjà optimisés pour la meilleure performance.
OriginalL'auteur Chathuranga Chandrasekara