使用select IO复用实现多人匿名聊天室(linux系统下)
功能:用户可发送消息,并同时能看到其他用户发的消息,用户输入over退出
实现思路:
服务端仅作为消息的中转方,使用select管理所有连接的客户socket 以及自己的监听socket ,只用select的读fd_set
当 某个用户socket可读时,读取消息,并发给其他所有用户
客户端由于允许自己键入消息,所以也得用select管理 键盘这个socket 和 服务端的连接socket,都是读事件
所用函数:select IO复用,socket API阻塞函数(accept,connect,read,write)
Server:
#include <sys/socket.h>
#include <string>
#include <set>
#include <sys/select.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main(){
int listen_fd = socket(AF_INET,SOCK_STREAM,0);//创建一个监听socket
struct sockaddr_in serveraddr;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);//IN