- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试通过关注 Beej's guide 来学习网络编程.我编译了the server in section 7.2 ,那是使用 select()
,现在我正在尝试为该服务器编写一个客户端,这样我就可以在我的机器上打开两个终端并能够聊天。
我从 client he gives as an example in section 6.2 开始,我可以看到,如果我连接到 localhost
,服务器会接受连接,所以我从那里开始。
我所做的是在接受到服务器的连接后立即编辑部分(在 freeaddrinfo(servinfo);//all done with this structure
之后),这是代码的一部分我已经添加了。
while (1) {
FD_ZERO(&readfds);
FD_ZERO(&writefds);
FD_SET(STDIN, &readfds);
FD_SET(sockfd, &writefds);
fcntl(STDIN, F_SETFL, O_NONBLOCK);
if (select(sockfd+1, &readfds, &writefds, NULL, NULL) < 0) {
close(sockfd);
perror("client: select");
exit(1);
}
if (FD_ISSET(sockfd, &writefds)) { // got data from socket, write it to console
numbytes = recv(sockfd, buf, MAXDATASIZE, 0);
buf[numbytes] = '\0';
printf("%s\n", buf);
}
if (FD_ISSET(STDIN, &readfds)) { // got data from stdin, write it to socket
fgets(buf, MAXDATASIZE, STDIN);
send(sockfd, buf, strlen(buf), 0);
}
}
在尝试运行这段代码时,我注意到 recv()
永远不会返回。我知道这段代码远非完美,但这是我第一次使用套接字,所以我很乐意就我在这里做错了什么获得一些指导。
最佳答案
recv(2)
是一个读取操作,所以 sockfd
应该放在 readfds
而不是 writefds
中。
(顺便说一句,STDIN
来自哪里?在 POSIX 系统上,您可以使用 STDIN_FILENO
。)
您已经说过这是简单的测试代码(在实践中可能会按预期工作),但以防万一您没有意识到:recv()
可能会拆分数据任意地。作为一个极端的例子,它可以一次返回一个字节。
关于c - 按照 Beej 的网络编程指南实现聊天客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29036494/
也许我还没有完全清醒,但我正在翻阅Beej关于数据报套接字的网络编程指南 https://beej.us/guide/bgnet/html/multi/clientserver.html#simple
我正在尝试通过关注 Beej's guide 来学习网络编程.我编译了the server in section 7.2 ,那是使用 select(),现在我正在尝试为该服务器编写一个客户端,这样我就
我刚刚浏览了 Beej 的《网络指南》,对这部分代码感到好奇(特别标有“从这里”和“到这里”): // main loop for(;;) { read_fds = maste
我正在尝试构建一个基本的客户端服务器,因此我可以对其进行修改,然后在 IDA 中进行分析。有人指出 Beej 的套接字编程示例是权威指南: http://beej.us/guide/bgnet/out
这是代码 void sigchld_handler(int s) { while(waitpid(-1, NULL, WNOHANG) > 0); } // get sockaddr, IPv
我正在阅读此处的 C 网络编程简单教程: https://beej.us/guide/bgnet/html/multi/index.html 通读之后,我的计划是实现一个测试客户端/服务器程序,然后开
我是一名优秀的程序员,十分优秀!