如何连接到socket(c)?

时间:2016-06-01 14:45:17

标签: c sockets server

我无法通过套接字连接到我的服务器程序。

我的服务器程序可以正常使用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;
}

2 个答案:

答案 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;
}

Here is a good tutorial