【发布时间】:2009-10-06 17:55:46
【问题描述】:
我的服务器已启动并正在运行(通过 telnet 连接有效,因此我知道它的功能),但我的客户端似乎无法建立连接。我觉得这与我填写 sockaddr_in serverAddr 结构的方式有关。
有人可以帮忙吗?谢谢。
int clientSocket;
char hostname[256];
struct sockaddr_in serverAddr;
struct hostent *host;
socklen_t theirAddrSize;
gethostname(hostname, sizeof(hostname));
host = gethostbyname(hostname);
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr( host->h_name );
serverAddr.sin_port = htons( 30000 );
if ( clientSocket = socket( AF_INET, SOCK_STREAM , 0 ) == -1) {
cerr << "socket failed ; exiting..." << endl;
exit(1);
}
if ( connect( clientSocket , (struct sockaddr *) &serverAddr , sizeof(serverAddr) ) == -1 ) {
cerr << "connect failed ; exiting..." << endl;
exit(1);
}
connect 总是返回 -1。
【问题讨论】:
-
您是否检查过 inet_addr 返回的 IP 地址是否正确?
-
什么是主机->h_name?显示对套接字和连接的调用。请提供更多代码。
-
host 是 hostent 类型,h_name 返回包含本地 ip 的字符串。
-
发生了哪些错误? socket() 或 connect() 失败了吗?失败后可以打印errno吗?如果客户端的退出代码是-1(255?),那很可能是段错误。在这种情况下,gethostbyname 会失败。
-
对非socket的socket操作是错误