2

我需要打印服务器发送的随机数,但它打印随机符号它是一个类似于彩票的程序,它给了我 5 个数字和 2 颗星我搜索解决方案,但我没有找到任何解决方案。有人可以帮忙吗?这是我的代码,重要的是:..................................

//Código do server
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <time.h>
#include <Windows.h>
#include <cstdint>
#define TRUE 1
#define DS_TEST_PORT 68000

#pragma comment (lib, "ws2_32.lib")
#pragma warning(disable : 4996)

int main()
{
    // Initialise winsock
    WSADATA wsData;
    WORD ver = MAKEWORD(2, 2);
    int chave[7] = { 0, 0, 0, 0, 0, 0, 0, };
    srand(time(0));

    .........
    
    // Main program loop
    char strMsg[1024];
    char strRec[1024];

    int i = 1;

    strcpy(strMsg, "\nHello! welcome to the server...\n");
    printf("\n%s\n", strMsg);
    send(clientSocket, strMsg, strlen(strMsg) + 1, 0);

    while (TRUE) {
        ZeroMemory(strRec, 1024);
        ZeroMemory(strMsg, 1024);
        int bytesReceived = recv(clientSocket, strRec, 1024, 0);
        if (bytesReceived == SOCKET_ERROR) {
            printf("\nReceive error!\n");
            break;
        }
        if (bytesReceived == 0) {
            printf("\nClient disconnected!\n");
            break;
        }

        printf("Client: %s\n", strRec);

        if (strcmp(strRec, "chave") == 0) {

            for (int j = 0; j < 5; j++) {
                strMsg[j] = rand() % 50;
            }
            for (int k = 5; k < 7; k++) {
                strMsg[k] = rand() % 12;
            }
            send(clientSocket, strMsg, strlen(strMsg) + 1, 0);

        }
        else if (strcmp(strRec, "bye") == 0) {

            strcpy(strMsg, "Bye client...\n");
            send(clientSocket, strMsg, strlen(strMsg) + 1, 0);
            Sleep(1000);
            system("pause");
            break;
        }
        else {

            fputs("You: ", stdout);
            fgets(strMsg, 1024, stdin);

            send(clientSocket, strMsg, strlen(strMsg) - 1, 0);  // (-1) para nao enviar \n
        }
    }

    // Close the socket
    closesocket(clientSocket);  

    //Cleanup winsock
    WSACleanup();

    return 1;
}

客户

    /*
    Simple winsock client
*/

int main(int argc, char* argv[])
{
    WSADATA wsa;
    SOCKET s;
    struct sockaddr_in server;
    char bye[] = "bye\n";
    char* message = (char*)malloc(2000);
    char server_reply[2000];
    int recv_size;
    int ws_result;
   
    .............

    while (TRUE)
    {
        ZeroMemory(message, 1024);
        ZeroMemory(server_reply, 1024);
        fputs("Escreva chave para receber uma chave, escreva bye para sair do programa\n ", stdout);
        fgets(message, 1024, stdin);

        ws_result = send(s, message, strlen(message) - 1, 0);  // (-1) para nao enviar \n
        if (ws_result < 0)
        {
            puts("Send failed");
            return 1;
        }
        //Receive a reply from the server
        recv_size = recv(s, server_reply, 2000, 0);

        if (recv_size == SOCKET_ERROR)
        {
            puts("recv failed");
        }

        printf("Server: %s\n", server_reply);

        if (strcmp(message, bye) == 0)
        {
            system("pause");
            break;
        }
    }
    // Close the socket
    closesocket(s);
    //Cleanup winsock
    WSACleanup();
    return 0;
}

客户端控制台

4

0 回答 0