La création d'une base de C/C++ socket TCP écrivain
Ci-dessous est le suivant de la base de socket code je suis venu avec:
//General includes:
#include <iostream>
#include <stdio.h>
#include <string>
//Network related includes:
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
//Target host details:
#define PORT 1234
#define HOST "74.74.74.74"
using namespace std;
//Function prototypes:
string MessageFormat(int, char**);
void MessageSend(string);
int main(int argc, char *argv[])
{
//Parse arguments and format message:
string message = MessageFormat(argc, argv);
//Send the message out:
MessageSend(message);
return 0;
}
string MessageFormat(int argc, char *argv[])
{
//Massage the command line parameters
//into my desired payload format.
return message;
}
void MessageSend(string message)
{
int sd, ret;
struct sockaddr_in server;
struct in_addr ipv4addr;
struct hostent *hp;
sd = socket(AF_INET,SOCK_DGRAM,0);
server.sin_family = AF_INET;
inet_pton(AF_INET, HOST, &ipv4addr);
hp = gethostbyaddr(&ipv4addr, sizeof ipv4addr, AF_INET);
//hp = gethostbyname(HOST);
bcopy(hp->h_addr, &(server.sin_addr.s_addr), hp->h_length);
server.sin_port = htons(PORT);
connect(sd, (const sockaddr *)&server, sizeof(server));
send(sd, (char *)message.c_str(), strlen((char *)message.c_str()), 0);
}
C'est assez basique, et ne les en fait fonctionner. CEPENDANT, c'est l'envoi de paquets UDP au lieu de TCP des paquets, de sorte que l'hôte cible attend TCP rejette ces. Aussi, par l'inspection se connecter/envoyer des valeurs et en regardant mes interfaces avec ngrep je ne peux 100% vérifier le paquet, ce qui n'est pas le problème.
Je suis seulement intéressé dans la modification de ce que j'ai, pas la création d'une gamme complète de fonctions de serveur avec boost asio. Comment puis-je ajuster cette façon qu'il fonctionne en termes de TCP au lieu de UDP?
Changement
Bien sûr. Merci.
SOCK_DGRAM
à SOCK_STREAM
. (Indice: UDP User = Paquet Protocole).Bien sûr. Merci.
OriginalL'auteur kmarks2 | 2013-05-10
Vous devez vous connecter pour publier un commentaire.
Suivantes sont les changements que vous devez faire pour transférer des données via TCP
Lors de la création de la socket passer des paramètres corrects .Dans l'exemple ci-dessus, vous avez passé SOCK_DGRAM au lieu de passer SOCK_STREAM.
Après la liaison du serveur devrait aller dans le mode d'écoute (consultez la page de manuel de l'écouter)
alors que Côté Client doit se connecter après la création de la socket.
Puis accepter à côté serveur après l'écoute.
Finale en Lecture et en écriture pour le transfert de données
Schéma ci-joint vous donnera une image claire de connexion TCP
Vous pouvez consulter les pages de manuel pour les informations détaillées sur toutes les fonctions ou reportez-vous beej du guide de programmation socket ( utiliser cette lien )
OriginalL'auteur Mayank Jain
Remplacer
SOCK_DGRAM
avecSOCK_STREAM
.Aussi, lire le manuel ou obtenir un bon livre.
OriginalL'auteur Useless