C++ 套接字 - send() 和 connect()

1 c++ sockets connect send

我是套接字编程的新手。我正在用 C++ 制作一个客户端套接字,我的朋友正在制作一个服务器端套接字(也是用 C++ 编写),我们的目标是一起制作一个聊天应用程序。作为套接字编程的新手,我在互联网上搜索 C++ 套接字及相关内容,并且收集了足够的信息来创建套接字并向另一个套接字发送内容。问题出在sendconnect函数上。我真的不明白我应该在其中包含哪些参数,以及如何初始化这些参数。我希望有更多经验的人可以解释它们是如何工作的,以及使用什么值作为参数。这是 MSDN 的代码示例。我希望有人帮忙!不管怎样,谢谢!

\n\n
int send(\n  _In_       SOCKET s,\n  _In_ const char   *buf,\n  _In_       int    len,\n  _In_       int    flags\n);\n\nint connect(\n  _In_ SOCKET                s,\n  _In_ const struct sockaddr *name,\n  _In_ int                   namelen\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已经知道如何创建套接字,所以我知道第一个参数是什么;这是插座。

\n\n

编辑2:

\n\n

这些是我使用的模块;我不确定它们是否是我应该使用的;我只是从网上看到的 C++ 套接字示例中复制了它们。

\n\n
#include<iostream>    //cout\n#include<stdio.h> //printf\n#include<string.h>    //strlen\n#include<string>  //string\n#include<sys/socket.h>    //socket\n#include<arpa/inet.h> //inet_addr\n#include<netdb.h> //hostent\n
Run Code Online (Sandbox Code Playgroud)\n\n

另一件事 \xe2\x80\x94 我正在使用 UDP 协议。不确定这是否会影响任何事情,呵呵!

\n

sel*_*bie 5

这是 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;
}
Run Code Online (Sandbox Code Playgroud)