我想在下面的代码中包含一个 for 循环,它可以每隔 n 秒连续发送数据 id、时间戳和消息

Posted

技术标签:

【中文标题】我想在下面的代码中包含一个 for 循环,它可以每隔 n 秒连续发送数据 id、时间戳和消息【英文标题】:I want to include a for loop in the code below which can continuously send data id, timestamp and message at interval of every n seconds 【发布时间】:2017-09-29 08:43:02 【问题描述】:

这是必须设置预期 for 循环的客户端程序。但是我不知道在哪里包含它,因为我是套接字编程的新手。请有人帮我编码。我需要这段代码包含一个循环,它可以帮助我在每 n 秒内不断地将随机数据传输到服务器。

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
void error(char *msg)

    perror(msg);
    exit(0);


int main(int argc, char *argv[])

    int sockfd, portno, n;

    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buffer[256];
    if (argc < 3) 
       fprintf(stderr,"usage %s hostname port\n", argv[0]);
       exit(0);
    
    portno = atoi(argv[2]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
        error("ERROR opening socket");
    server = gethostbyname(argv[1]);
    if (server == NULL) 
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr, 
         (char *)&serv_addr.sin_addr.s_addr,
         server->h_length);
    serv_addr.sin_port = htons(portno);
    if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) 
        error("ERROR connecting");
    printf("Please enter the message: ");
    bzero(buffer,256);
    fgets(buffer,255,stdin);
    n = write(sockfd,buffer,strlen(buffer));
    if (n < 0) 
         error("ERROR writing to socket");
    bzero(buffer,256);
    n = read(sockfd,buffer,255);
    if (n < 0) 
         error("ERROR reading from socket");
    printf("%s\n",buffer);
    return 0;

【问题讨论】:

那又怎样?去做吧。你没有真正提出问题。 我无法做到,所以我请人帮助我。放松。 很遗憾,这不是代码编写服务。 【参考方案1】:

在开头添加#include&lt;time.h&gt;。 使用下面给出的函数来添加延迟。

void delay(unsigned short secs)

    unsigned milli_seconds = 1000 * secs;

    clock_t start_time = clock(); //declaration in time.h 

    while (clock() < start_time + milli_seconds)
        ;

main()内部无限循环调用delay(interval)发送timestamp、id和

int main(int argc, char *argv[])

    unsigned data_id=0;
    char data[1024];
    ...
    while(1)
    
          delay(5);
          send(client_sock,data,strlen(data),0);
    
    ..
    return EXIT_SUCCESS;

希望你能明白。

注意:不要使用 bzero() 而是使用 memset()。更多内容请阅读this one。

【讨论】:

以上是关于我想在下面的代码中包含一个 for 循环,它可以每隔 n 秒连续发送数据 id、时间戳和消息的主要内容,如果未能解决你的问题,请参考以下文章

Windows CMD:循环FOR,其路径中包含空格的文件

在绘图表达式中包含文本控制字符

在R中将嵌套的for循环转换为并行

数组在 C++ 中包含来自 python 的范围

在 for 循环 r markdown 中包含两个变量之间的空格(pdf 输出)

我可以简化这个 for 循环吗?