C ++ Web development (a) understand and build basic Socket

Directly look at the code and comments, this part of the code from the network video

Server:

#define WIN32_LEAN_AND_MEAN  //Windows.h 包含了早期的sock 1版本的实现,为了避免这些实现影响到sock 2的编译,这里就加入这个宏,尽可能引用新的定义以及实现
#include <iostream>
#include <Windows.h>
#include <Winsock2.h>

#ifdef WIN32
    #pragma comment(lib, "ws2_32.lib");  //这里库里面包含了对网络通信代码的实现
#endif // WIN32

int main(int argc, char* argv)
{
    WORD wVersion = MAKEWORD(2, 2);
    WSADATA wData;
    //启动网络环境
    WSAStartup(wVersion, &wData);

    //创建一个服务端Socket
    SOCKET _server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    sockaddr_in sock_addr;
    sock_addr.sin_family = AF_INET;
    sock_addr.sin_port = htons(1111);  //这里是因为本地的编码和网络协议的编码不一致,所以需要转换 host to unsigned short
    sock_addr.sin_addr.S_un.S_addr = INADDR_ANY; //这里表示可以用我本地所有的IP来建立连接,也可以特殊初始化一个IP字符串,表示我只想让网络通信在这个IP上进行
    //绑定socket 到某IP以及端口
    if (SOCKET_ERROR == bind(_server, (sockaddr *)&sock_addr, sizeof(sockaddr_in)))
    {
        std::cout << "socket bind error..." << std::endl;
        return 0;
    }

    //监听客户端连接
    if (SOCKET_ERROR == listen(_server, 5))
    {
        std::cout << "socket listen error..." << std::endl;
        return 0;
    }

    sockaddr_in client_sock_addr;
    int nLen = sizeof(sockaddr_in);
    SOCKET _client = INVALID_SOCKET;

    while (true)
    {
            //接受客户端连接
        _client = accept(_server, (sockaddr *)&client_sock_addr, &nLen);
        if (INVALID_SOCKET != _client)
        {
            std::cout << "get a client connect. IP:" << inet_ntoa(client_sock_addr.sin_addr) << std::endl;
        }

        char* return_msg = "I have listened to you...";
        int nRet = send(_client, return_msg, strlen(return_msg) + 1, 0);
        if (nRet <= 0)
        {
            std::cout << "send message error..." << std::endl;
        }

        closesocket(_client);
    }

    //关闭网络环境并作清理
    WSACleanup();
    return 1;
}

Client:

待续。。。。

Guess you like

Origin blog.51cto.com/11753138/2430507