zoukankan      html  css  js  c++  java
  • 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.  
  • 相关阅读:
    LeetCode——Generate Parentheses
    LeetCode——Best Time to Buy and Sell Stock IV
    LeetCode——Best Time to Buy and Sell Stock III
    LeetCode——Best Time to Buy and Sell Stock
    LeetCode——Find Minimum in Rotated Sorted Array
    Mahout实现基于用户的协同过滤算法
    使用Java对文件进行解压缩
    LeetCode——Convert Sorted Array to Binary Search Tree
    LeetCode——Missing Number
    LeetCode——Integer to Roman
  • 原文地址:https://www.cnblogs.com/longma8586/p/13881575.html
Copyright © 2011-2022 走看看