【发布时间】:2017-10-23 19:24:09
【问题描述】:
我有一个启动套接字连接的函数。我正在尝试一个名称为 xp 的服务器。 Socket() 工作正常。但是在连接时,我遇到了错误。我试图获取该服务器的 IP,我得到了一些随机 IP。我将参数传递给连接 API。我在日志文件中打印这些结果。我认为错误在于connect()。我正在使用 Linux Ubuntu。这是我的 SocketInit() 程序。我无法理解那个错误。
我将 SocketInit 函数称为 SocketInit(argv[2]); argv[2] 有我的服务器名称。
short SocketInit(char *xp)
{
if ( (local_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
printf("socket creation is unsuccessful check in SocketInit() \n");
sprintf(log_msg, "create socket descriptor error = %d", errno);
LogMsg('E', log_msg);
return(-1);
}
else
{
printf("socket connection is success\n");
}
pos_socket.sin_family = AF_INET;
pos_socket.sin_port = htons(port_no);
pos_socket.sin_addr.s_addr = inet_addr(xp);
if ( connect( local_socket, (struct sockaddr *) &pos_socket, sizeof(pos_socket) ) < 0 ) {
sprintf(log_msg, "connect on socket error=%d", errno);
printf("socket connect api is unsuccessful check in SocketInit() \n");
LogMsg('E', log_msg);
return(-1);
}
else{
printf("connect is successful\n");
return 0;
}
}
如何连接到服务器。如何将地址传递给 pos_socket.sin_addr.s_addr ?有时我会收到连接错误 110 和 111。但我仍然无法连接。
【问题讨论】:
-
xp指向的实际字符串是什么?是IP地址吗?需要解析为 IP 地址的主机名?你得到的错误是什么?请使用例如strerror从errno获取可打印的错误消息(errno的值可能因系统而异,请记住,在使用任何其他可能设置它的函数之前,您必须检查errno的值)。 -
使用
perror了解它是什么错误。 -
是的 xp 是一个服务器,它的 IP 地址是 10.254.xx.xx。我试图在我的实际程序中使用 gethostbyname 打印我的服务器 xp 的 IP 地址。它显示的 IP 完全相同。
-
所以如果你像
SocketInit("10.254.x.x")这样调用你的函数,它仍然不起作用?您是否尝试过将errno打印为字符串? -
是的,我试过了。结果相同。 @Someprogrammerdude