connect()的无效参数

问题描述 投票:0回答:1

我正在尝试编写代码来设置客户端套接字,该套接字可以从服务器发送/接收消息。这是我所拥有的:

// Create the socket
int s = socket(AF_INET, SOCK_STREAM, 0); // TODO: error checking

// Setup the client and server addresses
struct sockaddr_in cli_addr;
memset(&cli_addr, 0, sizeof(cli_addr));
cli_addr.sin_family = AF_INET;
cli_addr.sin_port = htons(7654);
cli_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(11111);
serv_addr.sin_addr.s_addr = inet_addr("XXX.XXX.XXX.XXX");

// Bind the socket to the client address (so we can receive messsages)
if (bind(s, (struct sockaddr*)&cli_addr, sizeof(cli_addr)) == -1) {
    perror("bind failed");
    exit(errno);
}
// Connect the socket to the server address (so we can send messages)
if (connect(s, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) {
    perror("connect failed");
    exit(errno);
}

[运行此命令时,出现错误connect failed: Invalid argument。不过,我在这里看不到我做错了什么。

c sockets
1个回答
0
投票
cli_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
...
serv_addr.sin_addr.s_addr = inet_addr("XXX.XXX.XXX.XXX");

您将套接字绑定到本地主机(127.0.0.1),但是然后连接到可能不是本地主机的地址。无法创建具有完全内部IP地址(即,无法从机器外部访问)到另一个系统的IP地址的TCP,因此“ Invalid arguments”

© www.soinside.com 2019 - 2024. All rights reserved.