gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:45:07 26 4
gpt4 key购买 nike

我正在尝试制作一个通过 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);
}

但是,出于某种原因,编译器为 inet_ptonconnectsend 提示 No matching function

最佳答案

inet_pton(AF_INET, INADDR_ANY, &saiServerAddress.sin_addr);

你不能像那样将 INADDR_ANY 传递给 inet_pton()。它期待一个 char* 字符串,例如:

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

顺便说一句,您无论如何都不能connect() 一个到INADDR_ANY (0.0.0.0) 的TCP 套接字。您需要指定监听服务器的实际IP地址。

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

您不能将 saiAddress* 传递给 connect(),它需要一个 sockaddr*,例如:

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

确保 saiServerAddress 声明为 sockaddr_insockaddr_storage(或者至少确保 saiAddress 是二进制的-与他们兼容)。

send(iSocket, sVal, strlen(sVal.c_str()), 0);

你不能像那样将 std::string 传递给 send()。它期待一个 void* 代替(你不应该使用 strlen(sVal.c_str()),使用 sVal.size() 相反),例如:

send(iSocket, sVal.c_str(), sVal.size(), 0);

关于c++ - TCP - C++ - 没有用于调用的匹配函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48195750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com