这是与服务器对话的基本程序。它要求客户端输入R,P或S,然后它将发送响应(1、2或3)。服务器将做出自己的决定,接收玩家的决定,计算赢家,然后将赢家送回。

这是我的代码,用于将其从客户端发送到服务器。

 char choice[1];
bool done = false;
while (!done) {
    printf("Rock = R , Paper = P, and Scissors = S\n");
    printf("Enter your choice:");
    scanf("%s", decision);

    switch (decision[0]) {
        case 'R' :
            decision[0] = '\0';
            choice[0] = '1';
            done = true;
            break;

        case 'P' :
            decision[0] = '\0';
            choice[0] = '2';
            done = true;
            break;

        case 'S' :
            decision[0] = '\0';
            choice[0] = '3';
            done = true;
            break;

        default :
            decision[0] = '\0';
            printf("That is not a correct entry. Please try again.\n");

    }
}

char *sendChoice = &choice[0];
//*((char*)choice) = '1';
printf("Player Choice: %c\n", *sendChoice);

if (send(clientSocket, sendChoice, strlen(sendChoice), 0) < 0){
printf("send error\n");
}


不管我做什么,我总是收到发送错误。我已经尽力了。我在网上搜索了可以提供帮助的所有内容,但我根本无法弄清为什么它不起作用。

如果我注释掉switch和while循环并仅对客户端选择进行硬编码,它将起作用,因此它必须与switch语句有关。

我应该注意,该连接正在工作。它只是发送功能不起作用。

最佳答案

strlen函数仅适用于字符串。在您的代码中,choice是一个字符而不是字符串的数组。 sendChoice是指向该单个字符的指针。

数据长度为1。您可以仅通过1作为大小,也可以使用sizeof(choice)。不要使用sizeof(sendChoice),因为那将是指针的大小!您不能使用strlen,因为您没有字符串。

如果您考虑一下,strlen不可能仅从您传递给它的指针中得知它仅指向单个字符。因此strlen只能通过某种魔术来起作用。

另外,请查阅send文档。当send失败时,它将告诉您如何获取有用的错误代码,这将帮助您将来进行故障排除。

关于c - C-在switch语句中分配值时send()无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54953892/

10-13 05:55