0

我正在制作一个通过网络发送和接收消息的程序,我目前将其设置为重复消息 50 次,但我希望它将每条消息延迟一秒。有没有办法可以使用选择来做到这一点?如果没有,我还能怎么做?

谢谢。

这是我的客户的代码

void
client (char * servername) {
   ssize_t     bytes;
   int         skt;
   char        buff[BUF_SIZE];
   int i;

   do{
   skt = createsocket ( servername, PORT );

   bytes = (ssize_t) sprintf (buff, "Hello %s, sequence number:", servername);

   if (write (skt, buff, bytes) < bytes) {
      fprintf (stderr, "WARNING: write didn't accept complete message\n");
   }

   memset (buff, 0, BUF_SIZE);
   bytes = read (skt, buff, BUF_SIZE);
   if (bytes < 0) {
      perror ("read()");
      exit (1);
   }

   printf ("Server echoed the following: %s\n", buff);
   i++;
   }while(i < 50);
}

Ps 我也将尝试使用 long 类型在其中添加一个序列号,我该怎么做呢?

4

1 回答 1

1

这应该与您想要的相当接近。(没有测试。)

void client (char * servername)
{
    ssize_t bytes;
    int skt;
    char buff[BUF_SIZE];
    int i = 0;
    long seqNum = 0;

    skt = createsocket ( servername, PORT );

    do
    {
        memset (buff, 0, BUF_SIZE);

        struct timeval t = {1, 0};

        select(0, NULL, NULL, NULL, &t);

        bytes = (ssize_t) sprintf (buff, "Hello %s, sequence number: %ld", servername, seqNum++);

        if (write (skt, buff, bytes) < bytes)
        {
            fprintf (stderr, "WARNING: write didn't accept complete message\n");
        }

        memset (buff, 0, BUF_SIZE);

        bytes = read (skt, buff, BUF_SIZE);

        if (bytes < 0)
        {
            perror ("read()");
            exit (1);
        }

        printf ("Server echoed the following: %s\n", buff);
        i++;
    }
    while (i < 50);
}
于 2013-10-30T13:36:51.070 回答