2017-04-06 2 views
0

Je suis nouveau dans la programmation socket. Je fais une socket côté client en C++ et mon ami fait une socket côté serveur (aussi en C++) et l'objectif ultime est de faire une application de chat en togheter. Étant nouveau à la programmation de douille, je cherchais l'Internet sur la prise et la relation de C++, et j'ai rassemblé l'information suffisante pour faire une douille et envoyer quelque chose à une autre douille. Le problème est avec les fonctions send() et connect(). Je ne comprends pas vraiment les paramètres que je devrais avoir et comment initialiser les paramètres. Im hopping quelqu'un plus d'expérience peut m'expliquer comment fonctionnent-ils et quelles valeurs à mettre sur les paramètres, a le site msdn ne pas expliquer clairement les valeurs de sorcière devrais-je utiliser. Ceci est l'échantillon de code msdn a, j'espère que quelqu'un aide! Peu importe, merci!Socket C++ - send() et connect()

Envoyer():

int send(
    _In_  SOCKET s, 
    _In_ const char *buf, 
    _In_  int len, 
    _In_  int flags 
); 

Connect():

int connect(
    _In_ SOCKET    s, 
    _In_ const struct sockaddr *name, 
    _In_ int     namelen 
); 

PS> Je alreaddy savoir comment creat une prise (initialiser), donc je sais ce qui se passe est le premier paramètre , son nom de socket: p

EDIT 2:

Ce sont les i utilise inclues, je ne suis pas sûr si elles un re ceux que je devrais ou ne devrais pas utiliser, je viens de les copier à partir d'un exemple de socket C++ que j'ai vu en ligne.

#include<iostream> //cout 
#include<stdio.h> //printf 
#include<string.h> //strlen 
#include<string> //string 
#include<sys/socket.h> //socket 
#include<arpa/inet.h> //inet_addr 
#include<netdb.h> //hostent 

Encore une chose> im utilisant un protocole UDP, je ne sais pas si cela affectera quoi!

+0

La norme C++ n'a pas de classe de socket. Incluez les bibliothèques que vous utilisez et plus de contexte dans votre question. J'assume les prises Winsock ou BSD de ce que je vois. –

+0

Il existe de nombreux livres et didacticiels sur l'écriture de code de socket. Vous devez lire l'un d'eux, ils vont inclure des exemples. SO n'est pas l'endroit pour obtenir une instruction de base comme celle-ci. – Barmar

+0

Eh bien, j'ai fait des recherches, mais je ne comprenais pas ce que j'ai vu, donc je sautillais quelqu'un pourrait m'expliquer ici – thecner

Répondre

0

Voici un client de socket minimum pour Windows. Il se connecte à Google et fait une demande GET et déverse le résultat. YMMV.

#include <winsock2.h> 
#include <WS2tcpip.h> 

int ResolveHostName(const char* pszHostName, sockaddr_in* pAddr) 
{ 

    int ret; 
    HRESULT hr = S_OK; 
    addrinfo* pResultList = NULL; 
    addrinfo hints = {}; 
    int result = -1; 

    hints.ai_family = AF_INET; 
    hints.ai_socktype = SOCK_STREAM; 

    ret = getaddrinfo(pszHostName, NULL, &hints, &pResultList); 

    result = (ret == 0) ? 1 : -1; 
    if (result != -1) 
    { 
     // just pick the first one found 
     *pAddr = *(sockaddr_in*)(pResultList->ai_addr); 
     result = 0; 
    } 

    if (pResultList != NULL) 
    { 
     ::freeaddrinfo(pResultList); 
    } 

    return result; 
} 



int main() 
{ 
    SOCKET sock = -1; 
    WSADATA data = {}; 
    sockaddr_in addrRemote = {}; 
    int result; 

    WSAStartup(MAKEWORD(2, 2), &data); 


    sock = socket(AF_INET, SOCK_STREAM, 0); 
    if (sock != -1) 
    { 
     if (ResolveHostName("www.google.com", &addrRemote) != -1) 
     { 
      addrRemote.sin_port = htons(80); 
      result = connect(sock, (sockaddr*)&addrRemote, sizeof(addrRemote)); 

      if (result != -1) 
      { 
       char* msg = "GET/HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n"; 
       int msg_len = strlen(msg); 
       result = send(sock, msg, msg_len, 0); 
       if (result != -1) 
       { 
        char szBuffer[10000+1]; 
        result = recv(sock, szBuffer, 10000, 0); 
        if (result > 0) 
        { 
         // safely null terminate 
         szBuffer[result] = '\0'; 
         printf("%s\n", szBuffer); 
        } 
       } 
      } 
     } 
    } 

    if (sock != -1) 
    { 
     closesocket(sock); 
     sock = -1; 
    } 

    return 0; 
} 
+0

très apprécié! Mal étudier le code et ty le comprendre! ty – thecner