C printf(“超时\n”); } 其他的 { //好 对于(i=0;i

C printf(“超时\n”); } 其他的 { //好 对于(i=0;i,c,sockets,udp,client-server,ipv6,C,Sockets,Udp,Client Server,Ipv6,printf(“超时\n”); } 其他的 { //好 对于(i=0;i

printf(“超时\n”); } 其他的 { //好 对于(i=0;i请在此处显示您的代码——pastebin.com已超载,不让我查看。pastebin现在已关闭。请将您的代码精简到演示问题所需的最低限度,然后编辑您的问题以在此处显示实际代码。@Barmer代码复制/粘贴here@Remy谢谢,复制/粘贴了问题中的代码。请参阅我的更新答案。我的错误。我有ipv6版本。除了底部的printf语句,这是我认为我已经完成这项工作时所拥有的,在所有的修改之前。它没有给我任何错误。这是输出:数据接收:\n-------------------\n发送到端口9000\n数据接收:\n-------------------\n“发送到端口9000”是从客户端发送的消息。还应注明“发送至9001端口”。因此,recv函数两次都成功,但是我没有得到消息的字符串。Wireshark显示两个数据包都是有效的。编辑:我希望我能在这里换行..我已经通过了。它不起作用了。我从您的代码中镜像的唯一内容是这一行“printf(“%s”,接收的字节数,缓冲区);”谢谢您的帮助!:]那么您的客户端代码可能有问题。您能用最新的服务器代码更新您的问题,并添加您的客户端代码吗?
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/select.h>
#include <stdio.h>
#include <string.h>

int max(int socket_handle[]);

int main( void )
{
   int       max_clients_allowed = 2;
   int       socket_handle[max_clients_allowed];
   int       client_handle[max_clients_allowed];
   struct    sockaddr_in6 server_address[max_clients_allowed];
   struct    sockaddr_in6 client_address[max_clients_allowed];
   char      buffer[1000];
   socklen_t client_length;
   fd_set    read_handles;
   struct    timeval timeout_interval;
   int       bytes_received;
   int       port_number = 9000;
   int       retval;
   int       i;


   printf("Hello, human.\n");

   for (i = 0; i < max_clients_allowed; i++)
   {
       printf("Creating socket%d on port: %d\n", i, port_number + i);
       socket_handle[i] = socket(PF_INET6,SOCK_DGRAM,0);
       memset( &server_address[i], 0, sizeof( server_address[i] ) );
       server_address[i].sin6_family = AF_INET6;
       server_address[i].sin6_addr=in6addr_any;
       server_address[i].sin6_port=htons( port_number + i );

       if(bind( socket_handle[i], (struct sockaddr *)&server_address[i], sizeof( server_address[i] )) < 0)
       {
           perror("Unable to bind.");
           return -1;
       }
       else
       {
           printf("Bind %d successful.\n", i);
       }

   }



   while (1) {

       FD_ZERO(&read_handles);
       FD_SET(socket_handle[0], &read_handles);
       FD_SET(socket_handle[1], &read_handles);
       timeout_interval.tv_sec = 2;
       timeout_interval.tv_usec = 500000;
       retval = select(max(socket_handle) + 1, &read_handles, NULL, NULL, &timeout_interval);
       if (retval == -1)
       {
           printf("Select error\n");
           //error
       }
       else if ((retval = 0))
       {
           printf("timeout\n");
       }
       else
       {
           //good
           client_length = sizeof(struct sockaddr*);
           for (i = 0; i < max_clients_allowed; i++)
           {
              if (FD_ISSET(socket_handle[i], &read_handles))
              {
                  if((bytes_received = recvfrom(socket_handle[i],buffer,sizeof(buffer),0,(struct sockaddr *)&client_address[i], (socklen_t*)&client_length)) < 0)
                  {
                     perror("Error in recvfrom.");
                     break;
                  }
                  printf("\nData received:");
                  printf("\n--------------\n");
                  printf("%s", buffer);
            }
           }
       }
   }
}

int max(int socket_handle[])
{
    if (socket_handle[0] > socket_handle[1])
    {
        return socket_handle[0];
    }
        return socket_handle[1];
}
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/select.h>
#include <stdio.h>
#include <string.h>

int main( void )
{
    int       max_servers = 2;
    int       server_handle[max_servers];
    int       max_server_handle = 0;
    struct    sockaddr_in6 server_address[max_servers];
    struct    sockaddr_in6 client_address[max_servers];
    char      buffer[1000];
    socklen_t client_length;
    fd_set    read_handles;
    struct    timeval timeout_interval;
    int       bytes_received;
    int       port_number = 9000;
    int       retval;
    int       i;

    printf("Hello, human.\n");

    for (i = 0; i < max_servers; i++)
    {
        printf("Creating socket %d on port: %d\n", i, port_number + i);

        server_handle[i] = socket(PF_INET6, SOCK_DGRAM, 0);
        if (server_handle[i] < 0)
        {
            perror("Unable to create socket.");
            return -1;
        }

        if (server_handle[i] > max_server_handle)
            max_server_handle = server_handle[i];

        memset( &server_address[i], 0, sizeof( server_address[i] ) );
        server_address[i].sin6_family = AF_INET6;
        server_address[i].sin6_addr = in6addr_any;
        server_address[i].sin6_port = htons( port_number + i );

        if (bind( server_handle[i], (struct sockaddr *)&server_address[i], sizeof( server_address[i] )) < 0)
        {
            perror("Unable to bind.");
            return -1;
        }

        printf("Bind %d successful.\n", i);
    }

    while (1)
    {
        FD_ZERO(&read_handles);
        for (i = 0; i < max_servers; i++)
            FD_SET(server_handle[i], &read_handles);

        timeout_interval.tv_sec = 2;
        timeout_interval.tv_usec = 500000;

        retval = select(max_server_handle + 1, &read_handles, NULL, NULL, &timeout_interval);
        if (retval == -1)
        {
            printf("Select error\n");
            //error
        }
        else if (retval == 0)
        {
            printf("timeout\n");
        }
        else
        {
            //good
            for (i = 0; i < max_servers; i++)
            {
                if (FD_ISSET(server_handle[i], &read_handles))
                {
                    client_length = sizeof(client_address[i]);

                    if ((bytes_received = recvfrom(server_handle[i], buffer, sizeof(buffer), 0, (struct sockaddr *)&client_address[i], &client_length)) < 0)
                    {
                        perror("Error in recvfrom.");
                        break;
                    }

                    printf("\nData received on socket %d:", i);
                    printf("\n--------------\n");
                    printf("%.*s", bytes_received, buffer);
                }
            }
        }
    }
}