【问题标题】:how to send time to server from client如何从客户端向服务器发送时间
【发布时间】:2020-08-01 13:33:59
【问题描述】:

在我的 client.c 文件中我有这段代码

 time_t now;
 struct tm *now_tm;
 int hour;
 int minute;
 int second;

 now = time(NULL);
 now_tm = localtime(&now);
   hour = now_tm->tm_hour;
  minute = now_tm->tm_min;
  second = now_tm->tm_sec;
  printf("%d:%d:%d\n", hour, minute, second");

我已经在客户端和服务器之间建立了连接,现在我正在尝试将客户端的本地时间发送到服务器。但我不确定如何将这个时间发送到服务器。 C中是否有任何接受3个整数参数的发送方法?谁能帮帮我?

【问题讨论】:

  • 你需要设计一个协议,没有内置的。
  • @JonathonReinhart 你能告诉我更多关于协议的信息吗?比如是否有任何资源可以帮助我设计协议?
  • Google protobufs 是一种可能性。
  • 发布的代码无法编译,有几个原因!请发布minimal reproducible example,以便我们重现问题并帮助您调试。
  • OT: about: struct tm *now_tm; 在 typedef 中隐藏指针是一种非常糟糕的编程习惯。

标签: c server client send


【解决方案1】:

建议定义一个包含这三个整数值的struct。也许通过:

struct myStruct 
{
    int hour;
    int minute;
    int second;
};

声明结构的实例并填写字段:

struct myStruct data;
data.hour   = hour;
data.minute = minute;
data.second = second;

警告:确保服务器将其输入作为实例:struct myStruct 在特定 URL 的特定端口上

//socket():
sockfd = socket(AF_INET, SOCK_STREAM, 0); 
if (sockfd == -1) { 
    perror("socket failed"); 
    exit( EXIT_FAILURE ); 
} 

// sockaddr_in:
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET; 

// use server IP4 address in next statement
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 

// use server port in next statement
servaddr.sin_port = htons(PORT);  

//connect():
if (connect(sockfd, (servAddr*)&servaddr, sizeof(servaddr)) != 0) { 
    perror("connection failed"); 
    exit( EXIT_FAILURE ); 
} 

然后

if( write(sockfd, data, sizeof( struct myStruct )) != sizeof( myStruct ) )
{
    perror( "write to server failed" );
    exit( EXIT_FAILURE );
}

将信息发送到服务器

【讨论】:

    猜你喜欢
    • 2013-06-24
    • 2019-04-23
    • 1970-01-01
    • 2017-01-12
    • 2022-07-15
    • 2014-09-07
    • 2014-10-08
    • 2014-05-12
    • 1970-01-01
    相关资源
    最近更新 更多