gpt4 book ai didi

C++:使用选择()

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:09 25 4
gpt4 key购买 nike

我正在构建一个可以从服务器和用户 (stdin) 接收信息的客户端,因此我使用 select 来监视两者。发生的事情是键盘输入被监控,我向客户端发送一条消息并取回一条消息,没问题。但是当服务器发送消息时没有任何反应,我不知道为什么。使用 select() 是正确的方法吗?

这是我的代码:

void readSocket(fd_set tempfd) {
const char * tweet, * inMessage;
if (FD_ISSET(srverfd,&tempfd)) {
inMessage = getMessage();
printSystemMessages(inMessage);
}

if (FD_ISSET(STDIN_FILENO,&tempfd)) {
tweet = getUserTweet();
sendMessage(tweet);
inMessage = getMessage();
if (strcmp(inMessage,OK) != 0) {
printSystemMessages(inMessage);
}
if (strcmp(inMessage,EXIT) == 0) {
return;
}
}
return;
}

int main (int argc, char *argv[] ){
int value;
bool clientON = false;
fd_set tempfd;

if(establishConnection(argv[2],argv[3])){
cerr << "usage: failed to make connection" << endl << "exiting..." << endl;
exit(EXIT_FAILURE);
}

cout << "Connected successfully" << endl;
sendMessage("CONNECT "+clientName); //Connect
if(strcmp(getMessage(),OK) == 0){
build_select_list();
printSystemMessages("Welcome!");
clientON = true;
cout<< man <<endl;
}
while(clientON){
tempfd = inputFdSet;
printTweetFormat("TweetMy:");

value = select(maxSock, &tempfd, NULL, NULL, NULL);
if (value < 0) {
perror("select");
exit(EXIT_FAILURE);
}
if (value == 0) {
continue;
}
else {
readSocket(tempfd);
}
}
close(srverfd);

return 0;
}

最佳答案

这可能对您有所帮助 - 将 maxSock+1 而不是 maxSock 传递给您的 select() 调用;

来自 select() 的手册页

     nfds  is the highest-numbered file descriptor in any of the three sets,
plus 1.

关于C++:使用选择(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11062469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com