如何将字符串发送到服务器并回显它?

问题描述 投票:0回答:1

我正在创建一个程序,询问服务器当前时间。我想随请求发送我的名字,并让服务器随时间回显我的名字。我在哪里输入我的名字?

客户代码片段


    printf("Client is sending on IP address %s port: %d\n", servIP, servPort);

    /* Send time request to server */
    addrlen = sizeof(struct sockaddr_in);
    sendto(sockfd, buffer, (int)strlen(buffer) + 1, 0, (struct sockaddr *)&server, addrlen);
    printf("Request sent to server\n");
    /* Receive time request from server */
    recvfrom(sockfd, (char *) &current_time, (int) sizeof(current_time), 0, (struct sockaddr *)&server, (socklen_t *)&addrlen);

    /* Print the time received from the server */
    printf("\n The time received from the server:%s\n", ctime(&current_time));

    exit(0);

服务器代码段

/** Message **/
printf("Server is listening on port: %d\n", PORT);
    printf("Waiting for client request...\n");
    printf("Press CTRL + C to exit\n");

    while(1) {
        addrlen = sizeof(struct sockaddr_in);
        recvfrom(sockfd, buffer,BUFFSIZE, 0,(struct sockaddr *)&client, (socklen_t *)&addrlen);
        current_time = time(NULL);
        sendto(sockfd, (char *) &current_time, (int) sizeof(current_time), 0, (struct sockaddr *)&client, addrlen);
    }
    exit(0);
c client-server
1个回答
0
投票

您可以将时间放在名称后面的缓冲区中。

服务器:

printf("Server is listening on port: %d\n", PORT);
printf("Waiting for client request...\n");
printf("Press CTRL + C to exit\n");

while(1) {
    addrlen = sizeof(struct sockaddr_in);
    recvfrom(sockfd, buffer,BUFFSIZE, 0,(struct sockaddr *)&client, (socklen_t *)&addrlen);
    current_time = time(NULL);
    memcpy(buffer + strlen(buffer) + 1, &current_time, sizeof(current_time));
    sendto(sockfd, buffer, strlen(buffer) + 1 + sizeof(current_time), 0, (struct sockaddr *)&client, addrlen);
}
exit(0);

客户端将名称放入缓冲区:

printf("Client is sending on IP address %s port: %d\n", servIP, servPort);

/* Send time request to server */
addrlen = sizeof(struct sockaddr_in);
strcpy(buffer, name);
sendto(sockfd, buffer, (int)strlen(buffer) + 1, 0, (struct sockaddr *)&server, addrlen);
printf("Request sent to server\n");
/* Receive time request from server */
recvfrom(sockfd, (char *) buffer, sizeof(buffer), 0, (struct sockaddr *)&server, (socklen_t *)&addrlen);
/* Print the name received from the server */
printf("\n The name received from the server:%s\n", buffer);
memcpy(current_time, buffer + strlen(buffer) + 1, sizeof(current_time));
/* Print the time received from the server */
printf("\n The time received from the server:%s\n", ctime(&current_time));

exit(0);
© www.soinside.com 2019 - 2024. All rights reserved.