我正在尝试使用c编写类似于聊天的程序,主要问题是我不想使用线程,因此我需要使用select来跟踪从套接字传入的消息,并且我的标准输入。
我已经对如何进行选择进行了一些搜索,套接字部分似乎还不错,但是我无法正确获取标准输入。
fd_set read_fds;
FD_ZERO(&read_fds);
FD_SET(STDIN_FILENO, &read_fds);
FD_SET(sock_fd, &read_fds);
while(1){
select(sock_fd+1, &read_fds, NULL, NULL, NULL);
if(FD_ISSET(sock_fd, &read_fds) != 0) {
printf("Entered case for receive message\n");
char buf[4096];
memset(buf, 0, sizeof(buf));
int lastBit;
lastBit = recv(sock_fd, buf, sizeof(buf), 0);
if (lastBit > 0 && lastBit < 4096)
{
buf[lastBit] = '\0';
}
else
{
close(sock_fd);
//break;
}
printf("%s\n", buf);
} else if (FD_ISSET(STDIN_FILENO, &read_fds)) {
printf("Entered case for send message\n");
char msg[4096];
memset(msg, 0, sizeof(msg));
read(0, msg, sizeof(msg));
}
}
有了这个,我希望当我从服务器收到一条新消息时,消息会打印出来(没关系),而当输入内容时,代码会将其发送到我的服务器上(还是没问题)。