代码之家  ›  专栏  ›  技术社区  ›  zoecarver

TCP-C++-没有用于调用的匹配函数

  •  1
  • zoecarver  · 技术社区  · 8 年前

    我正在尝试制作一个通过TCP传输数据的基本程序。

    以下是客户端文件:

    收割台

    #include <stdio.h>
    #include <iostream>
    #include <sys/socket.h>
    #include <stdlib.h>
    #include <netinet/in.h>
    #include <sys/select.h>
    #include <unistd.h>
    #include <string>
    #include <arpa/inet.h>
    

    密码

    #include "socketclient.hpp"
    #include <arpa/inet.h>
    
    socketclient::socketclient () {
        iSocket = socket(AF_INET, SOCK_STREAM, 0);
    
        memset(&saiAddress, '0', sizeof(saiAddress));
    
        saiAddress.sin_family = AF_INET;
        saiAddress.sin_port = htons(3000);
        saiAddress.sin_addr.s_addr = INADDR_ANY;
    
        inet_pton(AF_INET, INADDR_ANY, &saiServerAddress.sin_addr);
    
        connect(iSocket, (struct saiAddress *)&saiServerAddress, sizeof(saiServerAddress));
    
        send(iSocket, sVal, strlen(sVal.c_str()), 0);
    }
    

    然而,出于某种原因,编译器说 No matching function 对于 inet_pton , connect send .

    1 回复  |  直到 8 年前
        1
  •  4
  •   Remy Lebeau    8 年前

    inet\u pton(AF\u inet、INADDR\u ANY和saiServerAddress.sin\u addr);

    你不能通过 INADDR_ANY inet_pton() 就像那样。它需要一个 char* 字符串,例如:

    inet_pton(AF_INET, "an IP address here", &saiServerAddress.sin_addr);
    

    顺便说一句,你不能 connect() TCP套接字到 INADDR\u任何 (0.0.0.0)无论如何。您需要指定侦听服务器的实际IP地址。

    连接(iSocket,(结构saiAddress*)&saiServerAddress,sizeof(saiServerAddress));

    你不能通过 saiAddress* connect() ,它应为 sockaddr* 相反,例如:

    connect(iSocket, (struct sockaddr *)&saiServerAddress, sizeof(saiServerAddress));
    

    确保 saiServerAddress 声明为 sockaddr_in sockaddr_storage (或者至少确保 saiAddress 与它们兼容)。

    发送(iSocket、sVal、strlen(sVal.c\u str()),0);

    你不能通过 std::string send() 就像那样。它需要一个 void* 相反(您不应该使用 strlen(sVal.c_str()) 使用 sVal.size() 相反),例如:

    send(iSocket, sVal.c_str(), sVal.size(), 0);
    
    推荐文章