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 SOCK_DGRAM à SOCK_STREAM. (Indice: UDP User = Paquet Protocole).
Bien sûr. Merci.

OriginalL'auteur kmarks2 | 2013-05-10