我正在尝试使用poll函数使客户端接受来自服务器的输入并将其打印出来,或接受来自键盘的输入并将其发送到服务器。输出具有承载来自服务器的信息的套接字的文件描述符,但我不知道应该将哪个文件描述符赋予pollfd结构的输入(从键盘接受输入的部分)。现在我给他们两个提供了相同的文件描述符。这是我的客户代码:
void error(const char *msg)
{
perror(msg);
exit(0);
}
void chat( int sockfd)
{
struct pollfd thing[2];
thing[0].fd = sockfd;
thing[0].events = POLLRDNORM | POLLERR;
thing[0].revents = 0;
thing[1].fd = sockfd;
thing[1].events = POLLERR | POLLWRNORM;
thing[1].revents = 0;
char buffer[256];
int n;
while(strcmp(buffer, "quit")!=0)
{
int r = poll(thing, 2, 1000);
if(r<0)
{
perror("poll");
sleep(1);}
bzero(buffer, 256);
if(thing[0].revents & POLLRDNORM)
{
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("the message is : %s\n",buffer);
}
else if(thing[1].revents & POLLWRNORM)
{ bzero(buffer, 256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");}
else continue;
}
}
答案 0 :(得分:0)
我不知道应该将哪个文件描述符赋予输入 pollfd结构(接受键盘输入的部分)。
如果键盘已连接到stdin
,您可以使用STDIN_FILENO
中的<unistd.h>
以及0
。