有一个公众聊天室,任何刚登录的用户都被会加入进去 每当一个新用户登录,就会和之前登录的用户成为好友,他们之间会建立一个私聊房间
对每个用户,开一个线程与之交互。 如果用户在某房间分享了文件,则在上述线程中再新开一个线程,单独传输文件。 传输文件的线程使用的端口号为8001~8005,每次传输文件时先申请端口,传输完后释放。 传输文件的流程为:
- 用户发送字符串信息,说要传输文件
- 服务器接受,申请端口,并向用户发送端口信息,之后进入传输文件的线程
- 用户新开线程,连接服务器发来的端口,之后传输二进制文件
- 服务器接受文件后,把文件名和文件内容存储到相应房间里,之后向房间里的其他用户发送一个提醒有文件的消息,退出文件线程
- 房间内的其他用户可以点击提醒文件消息图标,与服务器建立连接,服务器将存储的文件发送给他(未实现) 服务器端存储了所有的房间、以及房间内的文件。房间包括成员信息、房间名、房间id。
服务器和客户端都有自定义的send和recv函数,除了文件消息外,发送和接收都得需要这两个函数。 发送时,先发送一个长50字节的包,里面告知之后要发送的包的长度; 接收时,先接收一个长50字节的包,提取出长度信息后,在接收之后的包。
- 用户发送文件、其他用户点击下载文件
- 创建群聊