2017-04-06 19 views
0

新しいソケットプログラミング。私はクライアント側ソケットをC++で作っています。私の友人はサーバーサイドソケット(C++でも)を作っています。そして、owerの目標はチャットアプリケーションをtogheterにすることです。私はソケットプログラミングに新しいので、私はC++ソケットでインターネットを検索していました。そして、ソケットを作り、別のソケットに何かを送るのに十分な情報を集めました。問題は、send()およびconnect()関数にあります。私は実際にどのようなパラメータを持っているのか、どのようにパラメータを初期化するのか分かりません。誰かがもっと経験していると私は説明してくれます。彼らはどのように動作し、どの値をパラメータに当てはめるか、msdnウェブサイトでは私が使用すべき魔法使いの価値をはっきりと説明していません。これは、msdnコードサンプルですが、誰かが助けてくれるでしょう!関係なく、ありがとう!C++ソケット - send()とconnect()

センド():

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

接続():

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

PS>は、私はソケットを(それを初期化)クリートする方法を知っているalreaddy、私は何が起こるのか知っているが、最初のパラメータであります、そのソケット名:P

EDIT 2:

これらは、私は、イムわからない場合は、それらを使用しているinclues私が使用すべきであるか使用してはならないものかを再考しました。私はオンラインで見たC++ソケットの例からそれらをコピーしました。

#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 

もう1つ>私はUDPプロトコルを使用していますが、それがannything thoに影響するかどうかはわかりません。

+0

C++標準にはソケットクラスはありません。どのライブラリを使用しているのか、あなたの質問にはより多くの文脈を含める。私はWinsockまたはBSDソケットを私が見ているものと仮定します。 –

+0

ソケットコードの作成に関する多くの書籍とチュートリアルがあります。あなたはそれらの1つを読む必要があり、それらには例が含まれます。このような基本的な指示をする場所ではありません。 – Barmar

+0

さて、私は研究をしましたが、私が見たものを理解できませんでしたので、誰かが私にそれを説明することができました。 – thecner

答えて

0

ここにはWindows用の最小ソケットクライアントがあります。 Googleに接続してGETリクエストを行い、結果をダンプします。 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

非常に感謝!コードを教えて、それを理解してください!タイ – thecner

関連する問題