如何在stdin和套接字之间使用选择?

时间:2019-07-02 12:12:43

标签: c sockets select

我正在尝试使用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));
        }
    }

有了这个,我希望当我从服务器收到一条新消息时,消息会打印出来(没关系),而当输入内容时,代码会将其发送到我的服务器上(还是没问题)。

0 个答案:

没有答案