我无法通过套接字连接到我的服务器程序。
我的服务器程序可以正常使用telnet连接。
我无法发现问题,有什么想法吗?
int main(void){
int sockfd =0;
char recvBuff[1024];
struct sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons( 8888 );
memset(recvBuff, '0',sizeof(recvBuff));
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("\n Error : Could not create socket \n");
return 1;
}
memset(&serv_addr, '0', sizeof(serv_addr));
if(inet_pton(AF_INET,"192.168.0.1", &serv_addr.sin_addr)<=0)
{
printf("\n inet_pton error occured\n");
return 1;
}
if( connect(sockfd, (struct sockaddr *)&serv_addr.sin_addr, sizeof(serv_addr.sin_addr)) < 0)
{
printf("\n Error : Connect Failed \n");
return 1;
}
return 0;
}
答案 0 :(得分:2)
[请同时考虑 J Carl Zeigler &#39; answer here中提供的重要建议!]
您想要删除此行
memset(&serv_addr, '0', sizeof(serv_addr));
因为它只是覆盖了你之前初始化serv_addr
的内容:
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons( 8888 );
猜测您可能想要将您尝试设置的目标地址成员清零:
if(inet_pton(AF_INET,"192.168.0.1", &serv_addr.sin_addr)<=0)
这将是这样的:
memset(&serv_addr.sin_addr, 0, sizeof(serv_addr.sin_addr));
(注意使用值0
而不是字符'0'
,如果在系统上使用ASCII,则最有可能评估为值48
不需要任何将其归零的方法,因为inet_pton()
负责完全正确设置sin_addr
成员。
接下来您可能想要学习如何使用调试器自行修复此类stxxid问题。
答案 1 :(得分:2)
尝试:
if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
printf("\n Error : Connect Failed \n");
return 1;
}