c - 读写系统调用返回乱码 (C)

标签 c client system server

我在服务器和客户端之间写入 2 个整数,但它们之间很困惑。客户写道:

char playerMove[3];
char oppMove[3];
write(sock, playerMove, 3);
printf("Waiting on Opponent's move.\n");
read(sock, oppMove, 3);
printf("this was Opponent's move: %s\n", oppMove);

而相关的服务器代码是

char playerMove[3];
read(socket1, playerMove, 3);
printf("First move is: %s", playerMove);

write(socket2, playerMove, 3);

终端显示客户端说

Waiting on Opponent's move.
this was Opponent's move: �D�K

但在服务器的终端中我可以清楚地看到它正确完成

First move is: 3 1

有人可以帮我吗?我是 C 语言新手。我需要做一些特殊的事情来向我的客户写“3 1”吗?

最佳答案

尝试如下所示的操作。这里缓冲区oppMove在使用之前设置为0。

char playerMove[3];
char oppMove[3];
memset(oppMove,'\0',3);
write(sock, playerMove, 3);
printf("Waiting on Opponent's move.\n");
read(sock, oppMove, 3);
printf("this was Opponent's move: %s\n", oppMove);

我还建议使用 Sourav Ghosh 指出的 4 字节长的缓冲区

关于c - 读写系统调用返回乱码 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29407244/

相关文章:

c - 在 C 程序中链接 SDL

java - 开发网络游戏

C++ _popen()/system() 在 Windows 上运行连续命令

c - 对学校法规有疑问,需要一些指导

c - 为什么我在 ideone 和 codechef 编译器中出现运行时错误,而在我的终端中却没有?

在 c : include file not found 中编译

javascript - 如何在客户端浏览器中使用 Node 缓冲区模块 - 请详细说明

MySQL连接到谷歌应用引擎实例

types - Lisp 类型的系统故障

python - 构建 ifttt 克隆