75 lines
2.7 KiB
C
75 lines
2.7 KiB
C
#include <c_TcpClient.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include "c_Test.h"
|
|
|
|
int main(int argc, char** argv){
|
|
c_Socket_Init();
|
|
const char* server_host = "127.0.0.1";
|
|
const char* server_port = "1313"; /* Your time server daytime service port */
|
|
|
|
c_TcpClient_t client;
|
|
printf("[CLIENT] Connecting to Time Server at %s:%s...\n", server_host, server_port);
|
|
|
|
/* 1. Establish a raw stream connection using your explicit family-agnostic constructor */
|
|
c_err_t err = c_TcpClient_Connect(&client, AF_INET, server_host, server_port, NULL);
|
|
if (err != C_SUCCESS) {
|
|
fprintf(stderr, "[ERROR] Unable to connect to remote Time Server host destination.\n");
|
|
return -1;
|
|
}
|
|
|
|
printf("[CLIENT] Connection successful! Awaiting network timestamp data package...\n");
|
|
|
|
char recv_buffer[128];
|
|
memset(recv_buffer, 0, sizeof(recv_buffer));
|
|
c_size_t total_bytes_read = 0;
|
|
char send_buffer[1024];
|
|
c_size_t send_bytes = 0;
|
|
/*
|
|
* 2. Execute a raw block read operation.
|
|
* Loop to read stream chunks until the server sends the full packet and shuts down (returns C_ERR_EOF).
|
|
*/
|
|
while (true) {
|
|
c_size_t chunk_bytes = 0;
|
|
char* current_ptr = recv_buffer + total_bytes_read;
|
|
c_size_t available_space = sizeof(recv_buffer) - total_bytes_read - 1;
|
|
|
|
if (available_space == 0) break; /* Safety boundary ceiling check */
|
|
|
|
if (send_bytes == 0) {
|
|
c_size_t sz = snprintf(send_buffer, sizeof(send_buffer), "GET_TIME");
|
|
c_TcpClient_Send(&client, send_buffer, sz, &send_bytes);
|
|
}else {
|
|
// c_size_t sz = snprintf(send_buffer, sizeof(send_buffer), "STOP");
|
|
// c_TcpClient_Send(&client, send_buffer, sz, &send_bytes);
|
|
break;
|
|
}
|
|
|
|
err = c_TcpClient_Recv(&client, current_ptr, available_space, &chunk_bytes);
|
|
|
|
if (err == C_ERR_EOF) {
|
|
break; /* Server closed the connection gracefully, transaction complete */
|
|
}
|
|
if (err != C_SUCCESS) {
|
|
fprintf(stderr, "[ERROR] Network stream read transaction failure caught.\n");
|
|
c_TcpClient_Destroy(&client);
|
|
return -1;
|
|
}
|
|
|
|
total_bytes_read += chunk_bytes;
|
|
}
|
|
|
|
/* 3. Null-terminate the raw buffer safely before string logging operations */
|
|
recv_buffer[total_bytes_read] = '\0';
|
|
|
|
printf("\n " COLOR_GREEN "[SUCCESS] Network Time String Intercepted:" COLOR_RESET "\n");
|
|
printf(" >>> %s", recv_buffer);
|
|
|
|
/* 4. Safely close physical socket descriptors and reclaim global system assets */
|
|
c_TcpClient_Destroy(&client);
|
|
printf("\n[CLIENT] Client connection resources cleanly recycled.\n");
|
|
|
|
c_Socket_Destroy();
|
|
return 0;
|
|
}
|