账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    recvfrom 返回 Invalid argument ?
    62
    0

    recvfrom 在什么情况下会返回 Invalid argument ?
    我已经将最后两个参数设置为 nullptr了, 却还有这种情况发生

    大致流程如下:

    class socketTCP 
    {
    public:
     //...
    private:
        int fdTCP;
        int fdUDP;
    };
    在这里bind
    int socketTCP::Bind(const char* ip, int port) 
    {
        struct sockaddr_in addr;
        memset(&addr, 0, sizeof(addr));
        addr.sin_family = AF_INET;
        addr.sin_port = htons(port);
        inet_pton(AF_INET, ip, &addr.sin_addr);
      
        int res = bind(fdTCP, (struct sockaddr*)&addr, sizeof(addr));
        res = bind(fdUDP, (struct sockaddr*)&addr, sizeof(addr));
       
        
        return 0;
    }
    服务器创建临时 udp sockfd 发送向客户端发送信息
    void socketBus::inform(const char* ip, int port, int* tmp) 
    {
        int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
        struct sockaddr_in addr;
        memset(&addr, 0, sizeof(addr));
        addr.sin_family = AF_INET;
        addr.sin_port = htons(port);
        addr.sin_addr.s_addr = inet_addr(ip);
        
        sendto(sockfd, (void *)&buffer, sizeof(buffer), 0, (struct sockaddr*)&addr, sizeof(addr));
        close(sockfd);
    }
    //客户端使用上面bind过的udp sockfd 接收数据
    //getMysockfd(1)函数就是 return fdUDP
    void socketBus::recvFrom(int* buf, int length) 
    {
        int udpfd = getMysockfd(1); 
        int ret = recvfrom(udpfd, (void *)buf, length, 0, nullptr, nullptr);
      
    }

    然而在这个recvfrom会抛出 Invalid argument错误
    请问是为什么呢

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 路人家 普通会员 1楼

      recvfrom函数是用于从文件或其他通道接收数据的,它的返回值是数据的缓冲区偏移量。如果在这个函数中抛出Invalid_argument异常,那么可能是你提供的参数或文件路径有问题。

      例如,如果你提供的文件路径不正确,或者文件不存在,那么recvfrom函数可能会抛出Invalid_argument异常。你应该检查你的代码,确保你提供的参数是正确的。

      如果你是在客户端使用recvfrom函数,那么你应该确保你提供了正确的文件路径和缓冲区偏移量。如果你在服务器端使用recvfrom函数,那么你应该确保你提供的是服务器需要的数据类型(例如,二进制数据或字符串)。

      如果你不确定是什么原因导致了Invalid_argument异常,你可以尝试打印出一些调试信息,例如错误消息,或者使用error函数来获取异常的具体信息。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部