• socket 服务器 一个端口多个ip 创建


    tcp 应用服务器有时候会有多个网卡多个不同网段服务器ip地址,我们需要建一个socket server端绑定一个端口来接受多个网段相同端口的socket客户端连接

    此时就需要tcp应用服务器满足此功能,以下方法创建socket服务器可满足该需求

    举个例子,假设一个主机有inter1,inter2,,inter3三个接口,如果一个socket绑定了INADDR_ANY的地址和8000的端口,那么,从客户端过来的一个TCP包到达该主机,不管客户端connect的是inter1,inter2,inter3中的哪个地址,都会被该socket接收到。如果此时主机还要再建立一个新的socket,使用inter1接口和端口8000,将会失败,因为这个端口和地址已经被第一个socket监听了。

    #include <winsock2.h>

    #pragma comment(lib, "ws2_32.lib")


    int main()
    {
      int sockfd, newsockfd, portno = 6666, clilen;
      char buffer[256];
      struct sockaddr_in serv_addr, cli_addr;
      sockfd = socket(AF_INET, SOCK_STREAM, 0);
      if (sockfd < 0) {
        printf("ERROR opening socket ");
        return 0;
      }
      ZeroMemory((char *)&serv_addr, sizeof(serv_addr));
      serv_addr.sin_family = AF_INET;
      serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);//不再绑定ip地址,此处设置后socket serverip为 0.0.0.0
      serv_addr.sin_port = htons(portno);
      if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
        printf("ERROR on binding ");
        return 0;
      }

      listen(sockfd, 5);
      clilen = sizeof(cli_addr);
      newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
      if (newsockfd < 0) {
        printf("ERROR on accept ");
        return 0;
      }

      ZeroMemory(buffer, 256);
      if (SOCKET_ERROR == recv(newsockfd, buffer, 255, 0)) {
        printf("ERROR reading from socket");
        return 0;
      }
      printf("Here is the message: %s ", buffer);

      if (SOCKET_ERROR == send(newsockfd, buffer, 255, 0)) {
        printf("ERROR writing to socket");
        return 0;
      }

      return 0;
    }

     

    1.  
  • 相关阅读:
    [POI2013]BAJ-ytecomputer [动态规划]
    【2019.10.15】网课 Za
    【初赛】
    [NOI2014]魔法森林[最短路 spfa]
    【洛谷2019金秋营模拟赛1】
    【luogu1315】 观光公交[贪心]
    【luogu4450】收集邮票 [期望dp]
    [HAOI2012]高速公路 [线段树 期望]
    ALGO-185 Trash Removal
    精度计算——减法
  • 原文地址:https://www.cnblogs.com/longma8586/p/13881575.html
Copyright © 2020-2023  润新知