2017-04-06 154 views
0

新的套接字編程。我在C++中製作了一個客戶端套接字,我的朋友正在製作一個服務器端套接字(同樣在C++中),而且我們的目標是讓聊天應用程序變得更簡單。作爲套接字編程的新手,我在C++套接字上搜索互聯網並進行了關聯,並且收集了足夠的信息來創建套接字並將某些內容發送給另一個套接字。問題在於send()和connect()函數。我真的不明白我應該有什麼參數以及如何初始化參數。我跳過一些更多的經驗可以向我解釋他們是如何工作的,以及對參數有什麼價值,有msdn網站沒有清楚地解釋我應該使用的女巫值。這是msdn的代碼示例,希望有人幫助!無論如何,謝謝!C++套接字 - 發送()和連接()

發送():

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

編輯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 

一兩件事>使用UDP協議的IM,不知道這會影響annything壽!

+0

C++標準沒有套接字類。在你的問題中包括你使用的庫和更多的上下文。我認爲我所看到的是Winsock或BSD套接字。 –

+0

關於編寫套接字代碼有很多書籍和教程。你需要閱讀其中的一個,它們將包含示例。 SO並不是獲得這種基本指導的地方。 – Barmar

+0

嗯,我做了研究,但我不明白我看到了什麼,所以我跳了一個人可以在這裏解釋它 – thecner

回答

0

這是一個純粹的Windows套接字客戶端。它連接到Google併發出GET請求並轉儲結果。因人而異。

#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

非常感謝!虐待代碼和ty來理解它! TY – thecner