reseaux et socket en c++

reseaux et socket en c++ - C++ - Programmation

Marsh Posté le 18-10-2003 à 11:59:47    

quelqu'un serait -il  comment on fait pour programmer les sockets de façon simple c'est pour faire un petit logiciel de chat pour débuter.
merci

Reply

Marsh Posté le 18-10-2003 à 11:59:47   

Reply

Marsh Posté le 18-10-2003 à 12:03:22    

Drazor a écrit :

quelqu'un serait -il  comment on fait pour programmer les sockets de façon simple c'est pour faire un petit logiciel de chat pour débuter.
merci


 
ça veux dire quoi?
 
 
sinon sans blaguer il n'y a pas de lib de socket dans le standard c++, va falloir chercher dans des libs externes.


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 18-10-2003 à 12:11:07    

SchnapsMann a écrit :


va falloir chercher dans des libs externes.

Que t'as intéret à mapper sur les streams de C++ ou de faire en sorte que Taz ne soit jamais au courant.

Reply

Marsh Posté le 18-10-2003 à 13:02:31    

quel environnement ?
 
sis Linux, GNUCommonC++, Socket++, etc

Reply

Marsh Posté le 19-10-2003 à 08:46:12    

franchement vous etes gerbant, les répondeurs plus que les posteurs.
 
le gars demande a faire de la socket pour apprendre, répondez lui ce qu'il veut entendre : comment faire des socket, qu'il soit sur nux ou win, c'est 100% pareil, en C ou C++.

Reply

Marsh Posté le 19-10-2003 à 08:58:02    

Konar a écrit :

franchement vous etes gerbant, les répondeurs plus que les posteurs.
 
le gars demande a faire de la socket pour apprendre, répondez lui ce qu'il veut entendre : comment faire des socket, qu'il soit sur nux ou win, c'est 100% pareil, en C ou C++.

Si t'es pas jouasse tu peux te casser.
 
On n'a été gentil je trouve car l'unique réelle réponse est : "google est ton ami, comme pour 60% des questions de ce forum".
http://www.google.fr/search?q=C%2B [...] 8&oe=utf-8

Reply

Marsh Posté le 19-10-2003 à 09:07:14    

nraynaud a écrit :

Si t'es pas jouasse tu peux te casser.
 
On n'a été gentil je trouve car l'unique réelle réponse est : "google est ton ami, comme pour 60% des questions de ce forum".
http://www.google.fr/search?q=C%2B [...] 8&oe=utf-8


et en ce qui concerne les transferts de grande taille en tcp ???

Reply

Marsh Posté le 19-10-2003 à 10:28:57    

Konar a écrit :

franchement vous etes gerbant, les répondeurs plus que les posteurs.
 
le gars demande a faire de la socket pour apprendre, répondez lui ce qu'il veut entendre : comment faire des socket, qu'il soit sur nux ou win, c'est 100% pareil, en C ou C++.

non justement ça l'est pas du tout, qu'il soit sous win ou sous un unix, y a des différences, s'il fait du C, qu'il fasse en C, s'il fait du C++ qu'il fasse en C++ .|

Reply

Marsh Posté le 19-10-2003 à 10:30:50    

StanCW a écrit :


et en ce qui concerne les transferts de grande taille en tcp ???  

tu balances dans la socket sans t'occuper de la taille.
J'ai lu vite fait hier qu'on pouvait régler certains paramètres car TCP n'est pas très bien réglé par défaut pour les gros transfert, mais j'ai la flemme de rechercher le post (il était sur comp.lang.ada).

Reply

Marsh Posté le 19-10-2003 à 10:44:14    

oui, on peut, moi non plus je retrouve plus, en fait ça consiste à n'émettre le paquet que quand il est plein (ou un flush)

Reply

Marsh Posté le 19-10-2003 à 10:44:14   

Reply

Marsh Posté le 19-10-2003 à 13:11:54    

Mais à quoi peut bien servir ce forum si toutes les réponses aux questions sont sur googles ?
 
L'avantage d'un forum c'est de pouvoir poser ses questions aussi bêtes qu'elles soient et d'en débatre pour rentrer dans le sujet en profondeur.
 
Et puis niveau topics de la section C++ c'est plutôt mord, donc ca gène pas outre mesure je trouve.
 
Maintenant, le truc chiant c'est les topics doubles.


Message édité par iS@mi le 19-10-2003 à 13:16:44
Reply

Marsh Posté le 19-10-2003 à 13:18:18    

iS@mi a écrit :

Mais à quoi peut bien servir ce forum si toutes les réponses aux questions sont sur googles ?

Elles n'y sont pas toutes. Mais en général, quand elles n'y sont pas, personne ne sait sur ce forum et il faut aller sur des ml ou des newsgroups spécialisés.
 
Ce forum il sert à :  
1) apprendre à se servir de google
2) déconner sur blabla

Reply

Marsh Posté le 19-10-2003 à 19:31:31    

Taz a écrit :

non justement ça l'est pas du tout, qu'il soit sous win ou sous un unix, y a des différences, s'il fait du C, qu'il fasse en C, s'il fait du C++ qu'il fasse en C++ .|


 
les fonctions socket de berkeley sont standard, et si le prog est fait correctement il compilera sous linux, win, bsd, etc.
 
et c'est une lib plutot en C, avec des char* et plein de trucs dans ce genre. si je fais du c++ j'ai pas le droit de l'utiliser ? je fais comment, je m'abrutise a faire une classe spéciale socket ? (d'ailleurs aucune trouvée sur le net ne marche correctement)
 

Taz a écrit :

oui, on peut, moi non plus je retrouve plus, en fait ça consiste à n'émettre le paquet que quand il est plein (ou un flush)


 
c'est quoi un paquet "plein" ? "vide" je vois, mais plein la je saisis mal.
sinon pour envoyer des trucs de grosse taille (> 100 Ko par ex), je conseillerais quand meme de fragmenter les paquets (1, 2, 4 ou 8 Ko), ne serait ce que pour avoir un léger controle sur le transfert.

Reply

Marsh Posté le 19-10-2003 à 19:37:18    

1) je pense pas qu'une classe compatible stream soit abrutissante, du moins bien moins que les char*
2) c'est un paquet dont la charge utile est maximale.
3) pour les trucs de grosse taille, remplis tes paquets .| la couche IP se charge de faire se qu'il faut pour l'acheminement, pas la peine de fragmenter à la main (l'effet serait d'ailleurs désastreux)

Reply

Marsh Posté le 19-10-2003 à 20:27:53    

1) ca l'est du moment que les fonctions de base en C marchent suffisamment bien, en faire une belle classe (qui marcherait peut-etre moins bien) servirait juste a se dire "ouais, moi je fais du C++"
2) je vois toujours pas... si tu te referes aux 1400 octets (ou 1200, me souvien plus) qui sont en theorie la taille des paquets envoyés, la ok.
3) me vois tres mal envoyer 20 Mo d'un coup dans ma socket, elle risque de pas aimer. Fragmenter peut paraitre con vu que la couche ip fragmente deja, mais ce qui serait desastreux ca serait de penser que le transfert va marcher nickel. en coupant un fichier en petit paquets de 8 Ko, on a un controle total sur le transfert, d'ailleurs y a qu'a voir comment sont écrit les ftp...

Reply

Marsh Posté le 19-10-2003 à 21:10:23    

pourtant elle va aimer

Reply

Marsh Posté le 19-10-2003 à 21:11:00    

si on fragmente c'est poura voir un controle d'erreur sur l'ecriture pour pas avoir à reprendre depuis le debut, etc

Reply

Marsh Posté le 20-10-2003 à 08:24:43    

Taz a écrit :

si on fragmente c'est poura voir un controle d'erreur sur l'ecriture pour pas avoir à reprendre depuis le debut, etc

gni ? c'est TCP qui est sensé ce démerder de ça au niveau réseau (retransmition comprise).

Reply

Marsh Posté le 20-10-2003 à 08:29:41    

oui et alors ? tu fais ton write(socket en C, et comme sut veux gérer un peu les erreurs, tu regardes son code de retour qui t'indique combien on était écrit. si ça foire, tu réessaies. non ?

Reply

Marsh Posté le 20-10-2003 à 08:54:07    

Taz a écrit :

si ça foire, tu réessaies. non ?


honnêtement (je trouve que la question méritait d'être posée)
Je ne vois que 3 cas où réessayer, le cas d'interruption par un signal, celui d'un bourrage du buffer de sortie et celui de EAGAIN.

Citation :

ERRORS
     Write(), writev(), and pwrite() will fail and the file pointer will
     remain unchanged if:
 
     [EBADF]            D is not a valid descriptor open for writing.
 
     [EPIPE]            An attempt is made to write to a pipe that is not open
                        for reading by any process.
 
     [EPIPE]            An attempt is made to write to a socket of type
                        SOCK_STREAM that is not connected to a peer socket.
 
     [EFBIG]            An attempt was made to write a file that exceeds the
                        process's file size limit or the maximum file size.
 
     [EFAULT]           Part of iov or data to be written to the file points
                        outside the process's allocated address space.
 
     [EINVAL]           The pointer associated with d was negative.
 
     [ENOSPC]           There is no free space remaining on the file system
                        containing the file.
 
     [EDQUOT]           The user's quota of disk blocks on the file system
     [EINTR]            A signal interrupted the write before it could be com-
                        pleted.
 
     [EAGAIN]           The file was marked for non-blocking I/O, and no data
                        could be written immediately.
 
     In addition, writev() may return one of the following errors:
 
     [EDESTADDRREQ]     The destination is no longer available when writing to
                        a UNIX domain datagram socket on which connect(2) had
                        been used to set a destination address.
 
     [EINVAL]           Iovcnt was less than or equal to 0, or greater than
                        UIO_MAXIOV.
 
     [EINVAL]           One of the iov_len values in the iov array was nega-
                        tive.
 
     [EINVAL]           The sum of the iov_len values in the iov array over-
                        flowed a 32-bit integer.
 
     [ENOBUFS]          The mbuf pool has been completely exhausted when writ-
                        ing to a socket.
 
     The pwrite() call may also return the following errors:
 
     [EINVAL]           The specified file offset is invalid.
 
     [ESPIPE]           The file descriptor is associated with a pipe, socket,
                        or FIFO.


Mais c'est un problème applicatif et n'a rien à voir avec la liaison TCP qui est en dessous tant qu'aucun flush n'est lancé.
 
En fait je viens de comprendre ta remarque initiale, tu parlais de l'écriture dans la socket et de la transaction associée à tout write, pas de la connection réseau (auquel cas "fragmenter" voudrait au pire dire "flush" au mieux dire "close" ).

Reply

Marsh Posté le 20-10-2003 à 08:59:10    

voilà

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed