• 网络编程_bind函数


    #define  _WINSOCK_DEPRECATED_NO_WARNINGS
    #include
    #include
    #include//网络库。
    #pragma comment(lib,"Ws2_32.lib")//只有32位的。对应库。

    int main(void)
    {
        WORD wdVersion = MAKEWORD(2,2);//传入MAKEWORD宏里,存入wdVersion里。
        //MAKEWORD:原理((WORD)(((BYTE)(((DWORD_PTR)(a))&0xff))| ((WORD)(((BYTE)(((DWORD_PTR)(b)) &0xff)))<<8))。
        WSADATA wdScokMsg;
        //LPWSADATA lpw = malloc(sizeof(WSADATA));
        
        //int a = *((char*)&wdVersion);
        //int b = *((char*)&wdVersion+1);
        //WSAStartup(wdVersion, lpw);
        
        int nRes=WSAStartup(wdVersion,&wdScokMsg);
        
        if (0!=nRes)
        {
            switch (nRes)
            {
            case WSASYSNOTREADY:
                printf("重启下电脑试试,或者检查网络库。\n");
                break;
            case WSAVERNOTSUPPORTED:
                printf("请更新网络库。\n");
                break;
            case WSAEINPROGRESS:
                printf("请重新启动软件。\n");
                break;
            case WSAEPROCLIM:
                printf("请尝试关掉不必要的软件,以为当前网络运行提供充足的资源。\n");
                break;
            /*case WSAEFAULT://参数问题。
                break;*/
            
            }
        }
    //校验版本。
        if (2 != HIBYTE(wdScokMsg.wVersion) || 2 != LOBYTE(wdScokMsg.wVersion))
        {
            //说明版本不对。
            //清理网络库。
            WSACleanup();
            return 0;
        }

        SOCKET socketServer = socket(AF_INET, SOCK_STREAM,12);
        //成功返回可用的socket。失败返回INVALID_SOCKET。
        //int a = WSAGetLastError();//检测最近的系统定义函数。
        if (INVALID_SOCKET==socketServer)
        {
            int a = WSAGetLastError();//检测最近的系统定义函数。值为10043,请求的协议还没有在系统中配置,或者没有它存在的迹象。 
            //创建失败。
            //清理网络库。
            WSACleanup();
            return 0;
        }

        struct sockaddr_in si;
        si.sin_family = AF_INET;
        si.sin_port = htons(12345);//端口号
        si.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
        bind(socketServer, (const struct sockaddr*)&si, sizeof(si));

        closesocket(socketServer);
        
        //清理网络库。
        WSACleanup();
        //free(lpw);
        system("pause");
        return 0;
    }
     

    bind函数:

    1、作用:给socket绑定端口号与具体地址。

    a 、地址:找到电脑,只有一个。

    b、端口号:找到机器上对应的软件,如QQ,浏览器等都有自己的端口号;每一种通信的端口号是唯一的;同一个软件可以占多个端口号。

    2、参数1:上一个函数创建的socket,绑定了协议信息(地址类型、套接字类型、协议类型)bind函数就是绑定实质的地址、端口号。

    3、参数2:

    a、结构体:地址类型,装IP地址,端口号(u_short  两个字节)。

    b、结构体类型:sockaddr;

             1、成员1:跟socket函数参数1是一样的。

             2、成员2:IP地址,回送地址,本地回环地址,本地网络测试。

             3、成员3:一个整数;IP是机器的地址,端口是具体的软件的通信口(范围一般1024~65535)。查看端口号占用cmd->netstat -ano,查看端口号是否被占用netstat -aon|findstr "12345" 。

    4、参数2的类型大小,sizeof(参数2)。

  • 相关阅读:
    代码规范工具
    精解四大集合框架:List 核心知识总结
    Leetcode137. 某一个数字出现一次,其余数字出现3次
    图解选择排序算法及优化
    《代号:魂之刃2》- 身处黑暗的勇者游戏
    测试2年6.5K,每天“911”,我的心酸经历只有我自己知道···
    北大肖臻老师《区块链技术与应用》系列课程学习笔记[28]以太坊-美链
    天地图全国幼儿园数据下载与处理分析
    `Algorithm-Solution` `AcWing` 4726. 寻找数字
    青少年python系列 46.文件操作2
  • 原文地址:https://blog.csdn.net/qq_52119661/article/details/126211556