阅读背景:

C++网络开发(一)基本Socket搭建以及理解

来源:互联网 

直接看代码和注释,本部份代码起源于网络视频

服务端:

#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;
}#define WIN32_LEAN_AN



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: