【问题标题】:How to connect to socket (c)? [closed]如何连接到套接字(c)? [关闭]
【发布时间】:2016-06-01 14:45:16
【问题描述】:

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

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

【问题讨论】:

  • 首先您应该在所有错误情况下打印 errno。
  • [叹气] 发生了什么,打印出什么,什么是 perror/errno?
  • .. 例如,而不是 printf("\n Error : Connect Failed \n"); 使用 perror("connect() failed");
  • .. 并为所有系统调用执行此操作。

标签: c sockets server


【解决方案1】:

试试:

if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
   printf("\n Error : Connect Failed \n");
   return 1;
}

Here is a good tutorial

【讨论】:

    【解决方案2】:

    [请同时考虑 J Carl Zeigleranswer 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 问题。

    【讨论】:

    • LOL - 从任何地方复制/粘贴时,OP 一定是滑倒了.. ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多