gpt4 book ai didi

连接每次都失败(也收到非法指令 : 4)

转载 作者:太空宇宙 更新时间:2023-11-04 08:01:18 24 4
gpt4 key购买 nike

int connect_to_host(char* server_ip, char* server_port)
{
printf("%s\n", "in connect to host");
printf("server_ip in connect_to_host: %s\n", server_ip);
printf("server_port in connect_to_host: %s\n", server_port);
struct sockaddr_in remote_server_addr;
int fdsocket, port;
uint16_t port = atoi(server_port);
socklen_t len = sizeof(remote_server_addr);
fdsocket = socket(AF_INET, SOCK_STREAM, 0);
if(fdsocket < 0) {
printf("%s\n", "socket error");
return -1;
}

memset(&remote_server_addr, 0, sizeof(remote_server_addr));

remote_server_addr.sin_family = AF_INET;
remote_server_addr.sin_addr.s_addr = inet_addr(server_ip);
//inet_pton(AF_INET, server_ip, &remote_server_addr.sin_addr);
remote_server_addr.sin_port = htons(port);
printf("remote server port after htons: %d\n", remote_server_addr.sin_port);

if(connect(fdsocket, (struct sockaddr*)&remote_server_addr, &len) < 0) {
printf("%s\n", "connect error");
return -1;
}

return fdsocket;
}

这个 block 的输出:

in connect to host 
server_ip in connect_to_host: 192.168.1.179
server_port in connect_to_host: 49200
remote server port after htons: 12480
connect error
[LOGIN:ERROR]
[LOGIN:END]
Illegal instruction: 4

服务器用端口 49200 初始化,它的 IP 与客户端的 IP 相同(在本地机器上测试)- 192.168.1.179。

我不明白为什么连接失败。因为我在不同的函数中以相同的方式执行了 connect() ,只是在那种情况下连接是 UDP 并且它工作正常。是因为我试图连接到同一个 IP 吗?

我对这个很陌生。让我知道您是否需要更多代码部分。

最佳答案

if(connect(fdsocket, (struct sockaddr*)&remote_server_addr, &len) < 0) {
printf("%s\n", "connect error");
return -1;
}

问题就在这里。 connect() 的第三个参数是一个 addrlen_t,而不是一个指针。应该是:

if(connect(fdsocket, (struct sockaddr*)&remote_server_addr, len) < 0) {
perror("connect error");
return -1;
}

打印您自己的错误消息而不是 errnoperror()strerror()给你完全是浪费时间。不要那样做。每次任何系统调用失败时,您都必须打印或记录或返回实际错误。

显然“非法指令”问题不可能来自此代码,因为您在它退出后打印了更多消息。

关于连接每次都失败(也收到非法指令 : 4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46615521/

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