zoukankan      html  css  js  c++  java
  • connect()函数

    功能

    CONNECT函数建立到指定套接字的连接。

    函数原型

    int WSAAPI connect(
      SOCKET         s,
      const sockaddr *name,
      int            namelen
    );

    参数

      s

        标识未连接套接字的描述符

      name

        指向应建立连接的sockaddr结构的指针。

      namelen

        name参数指向的sockaddr结构的长度(以字节为单位)。

    返回值

    如果没有发生错误,则CONNECT返回零。否则,它将返回Socket_Error,并且可以通过调用WSAGetLastError检索特定的错误代码

    在阻塞套接字上,返回值表示连接尝试的成功或失败。

    使用非阻塞套接字,连接尝试无法立即完成。在这种情况下,connect将返回Socket_Error,而WSAGetLastError将返回WSAEWOULDBLOCK。在这种情况下,有三种可能的方案:

    • 通过检查套接字是否可写,使用SELECT函数确定连接请求是否完成。
    • 如果应用程序使用WSAAsyncSelect表示对连接事件感兴趣,则应用程序将收到FD_CONNECT通知,指示连接操作是否完成。
    • 如果应用程序使用WSAEventSelect来表示对连接事件的兴趣,则将向关联的事件对象发出信号,指示连接操作已经完成(成功与否)。

    使用

    #define MAX_LINE 10000
    #define PORT 7210
    
    SOCKET ClientSocket;
    struct sockaddr_in ServerAddr;
    char SendBuffer[MAX_LINE];
    
    ServerAddr.sin_family = AF_INET;
    ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
    ServerAddr.sin_port = htons(PORT);
    memset(ServerAddr.sin_zero, 0x00, 8);
    
    //一个细节:connect的第二个参数ServerAddr设置为sockaddr_in类型的变量,
    //然后再connect中应当将其强转为sockaddr类型
    iResult = connect(ClientSocket, (struct sockaddr*) & ServerAddr, sizeof(ServerAddr));
    if (iResult == SOCKET_ERROR)
    {
        cout << "Connect Error::" << GetLastError() << endl;
        return -1;
    }
    else
    {
        cout << "连接成功!" << endl;
    }

     特别需要注意的是,对于第二个参数,我们建立变量的时候,往往是使用的struct sockaddr_in类型,因为这样方便我们对协议类型、IP地址、端口号进行赋值,但是在connect中第二个参数应该是sockaddr类型,可以通过强制类型转换使struct sockaddr_in类型的变量转化为struct sockaddr类型。

    对于sockaddr_in和sockaddr,可以参考我的另一篇博客:

    https://www.cnblogs.com/cyx-b/p/12450811.html

  • 相关阅读:
    openJudge计算概论-谁考了第k名
    OpenJudge计算概论-求平均年龄
    OpenJudge计算概论-能被3,5,7整除的数
    OpenJudge计算概论-计算书费
    OpenJudge计算概论-计算三角形面积【海伦公式】
    OpenWrt 中安装配置Transmission
    OpenWrt中wifidog的配置及各节点页面参数
    Linux中后台执行任务
    通过ionice和nice降低shell脚本运行的优先级
    OpenWrt中对USB文件系统的操作, 以及读写性能测试
  • 原文地址:https://www.cnblogs.com/cyx-b/p/12512525.html
Copyright © 2011-2022 走看看