我正在尝试实现一个非常简单的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);
客户端相应地工作。 我不能混合recvs和发送?客户端的recv后的发送工作,服务器端的发送后的recv也没有。 我错过了什么? 希望这很清楚。
答案 0 :(得分:0)
char* buf;
使用此时的Instant SIGSEGV。做到这一点
char buf[MAX_BUF_SIZE];
然后:
recv(new_fd, buf, MAX_BUF_SIZE - 1, 0);
buf[MAX_BUF_SIZE] = '\0';
您忽略了recv().
int count = recv(new_fd, buf, MAX_BUF_SIZE - 1, 0);
if (count == 0)
{
// peer has closed the connection
close(new_fd);
return;
}
if (count == -1)
{
// I/O error
perror("recv");
close(new_fd);
return;
}
// All good: you received 'count' bytes
buf[count] = '\0';
请注意count,
如果是肯定的,可以是1
和MAX_BUF_SIZE-1.
之间的任何内容recv()
函数不必填充您的缓冲区,接收整个& #39;消息'等