无法为绑定套接字分配请求的地址。

问题描述 投票:-2回答:1

我检查了我的代码,但我不知道为什么程序不能绑定socket.我试了很多ip和端口(甚至127.0.0.1),但还是不行......这是我使用的代码。

//error message
void error (const char *msg)
{
    perror(msg);
    exit(1);
}

int main ()
{
    int sock, cli_sock, portno;
    char buffer[1024];
    char response[18432];

    struct sockaddr_in serv_addr, cli_addr;
    socklen_t cli_len;

    //creating socket
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock < 0)
        error("Error opening socket");

    bzero ((char *) &serv_addr, sizeof(serv_addr));

    //giving port number
    portno = 50005;

    //giving ip address
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    serv_addr.sin_port = htons(portno);

    //bind socket
    if(bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) != 0)
        error("Binding failed.");

    //listen
    listen(sock, 5);

    cli_len = sizeof(cli_addr);

    //accept
    cli_sock = accept(sock, (struct sockaddr *) &cli_addr, &cli_len);
    if(cli_sock != 0)
        error("Error on accepting");
}

(这只是socket部分的服务器代码,只是为了更多的信息,我的客户端版本是Windows的,服务器版本是Linux的)

这是我运行程序时的输出。

Binding failed.: Cannot assign requested address

c windows sockets tcp
1个回答
-1
投票

对于TCP来说,客户机和服务器的设置是:

服务器:

  • socket(创建监听套接字)
  • 绑定(监听Socker到本地地址:端口)
  • 监听

(接受循环头)

  • accept (让监听套接字等待输入的连接,连接成功后返回接受的套接字)
  • 读写(从接受的套接字!)、关闭(接受的套接字;可选
  • 关闭(接受的插座;可选)
  • 闭合

襻底

  • 关机
  • 闭合

客户端。

  • socket
  • 绑定(本地地址:端口,可选,不常用)
  • 连线(到远程地址:端口,那些服务器被绑定的)
  • 读写
  • 关机
  • 密切
© www.soinside.com 2019 - 2024. All rights reserved.