当前位置:  开发笔记 > 程序员 > 正文

在unix中创建和绑定端口时出现问题.(网络编程新手)

如何解决《在unix中创建和绑定端口时出现问题.(网络编程新手)》经验,为你挑选了1个好方法。

我在Unix中创建端口时遇到了麻烦.这段代码不断返回"创建socket(3)的错误",这没有任何意义,因为sockfd必须小于0才能打印错误行.

server.c:

int main (int argc, char **argv)
{
  int sockfd;
  struct sockaddr_in server_sockaddr;
  char buff[TRANSFER_BUFFER_LEN];

  /* check number of command line arguments */
  if (argc < 2)
  {
    fprintf (stderr, "Usage: %s \n");
    exit (EXIT_FAILURE);
  }

  /* create server socket */
  if ((sockfd = createUdpSocket (&sockfd,
                                 &server_sockaddr,
                                 atoi (*(argv + 1)))
      ) < 0);
  {
    fprintf (stderr, "Error creating socket (%d).\n", sockfd);
    exit (EXIT_FAILURE);
  }

  ...

return 0;
}

socket_utils.h:

int createUdpSocket (int *sockfd, struct sockaddr_in *client_sockaddr, int port)
{
  /* create socket */
  if ((*sockfd = socket (AF_INET, SOCK_DGRAM, 0)) == -1)
    return -1;

  memset (client_sockaddr, 0, sizeof (struct sockaddr_in));
  client_sockaddr->sin_family = AF_INET;
  client_sockaddr->sin_addr.s_addr = htonl (INADDR_ANY);
  client_sockaddr->sin_port = htons (port);

  /* bind socket */
  if (!bind (*sockfd, (struct sockaddr*) &client_sockaddr, sizeof (sockfd)))
  {
    close (*sockfd);
    return -2;
  }

  return *sockfd;
}

有任何想法吗?这个功能在我的客户端程序中运行正常,不占用端口值(而是取0).

干杯,

里斯



1> John Kugelma..:
if ((sockfd = createUdpSocket (&sockfd,
                                 &server_sockaddr,
                                 atoi (*(argv + 1)))
      ) < 0);

哎呀,分号来自哪里?你有一个偷渡者!


此外,这条线不会做你期望的:

if (!bind (*sockfd, (struct sockaddr*) &client_sockaddr, sizeof (sockfd)))

bind()函数在成功时返回0,在失败时返回-1.您的测试是向后的,并且在绑定成功而不是失败时会出错.&你说的也不正确&client_sockaddr.第三个参数需要是sockaddr_in结构的大小,而不是sizeof(sockfd).尝试:

if (bind (*sockfd, (struct sockaddr*) client_sockaddr, sizeof (struct sockaddr_in)) != 0)

当我们在这里时,你的使用打印输出缺少它的argv[0]论点:

fprintf (stderr, "Usage: %s \n");

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有