【发布时间】:2014-06-07 19:40:58
【问题描述】:
我正在尝试实现一个非常简单的 tcp 服务器/客户端,它应该这样做: S:监听端口 C:连接 S:发送“你好,输入密码” C:获取消息,发送密码 S:在客户密码正确/错误的情况下回答“正确”或“错误”。
我希望这很清楚。
我将如何在 C 中做到这一点?我使用了 Beej 的套接字编程指南,只是更改了 代码一点。服务器:
i = send(new_fd, "Hello, world!", 13, 0);
printf("send returned %d\n", i);
char* buf;
recv(new_fd, buf, MAX_BUF_SIZE - 1, 0);
buf[MAX_BUF_SIZE] = '\0';
if (!strncmp(buf, "lol", 3)) //the pw is lol
{
send(new_fd, "right", 11, 0);
printf("logged in\n");
}
else
{
// ...as above...
}
close(new_fd);
客户端相应地工作。 我不能混合接收和发送吗?客户端recv之后的发送都不起作用,服务器端发送之后的recv也不起作用。 我错过了什么? 希望这已经足够清楚了。
【问题讨论】:
-
在什么情况下不起作用?您发布的代码在调用
recv时看起来会崩溃,因为buf是无效指针。 -
啊。你完全正确。我没有给它合适的尺寸。这就是你说的无效,对吧?无论如何,现在工作正常。非常感谢。
-
我不知道什么是行不通的,说清楚一点,但我会给你几个建议,首先你应该为你的 buf 保留内存,比如 buf = ( char*) malloc (sizeof(char)*MAX_BUF_SIZE);之后,不要信任缓冲区内的数据,并在发送和接收之前使用 memclear
-
@izuel 不需要清除缓冲区。这完全是浪费时间。您只需要知道您实际收到了多少数据。