这是与服务器对话的基本程序。它要求客户端输入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/