高階IO復用應用 聊天室程式

2022-09-23 12:36:06 字數 806 閱讀 9218

簡單的聊天室程式:客戶端從標準輸入輸入資料後傳送給服務端,服務端將使用者傳送來的資料**給其它使用者。這裡採用io復用poll技術。客戶端採用了splice零拷貝。服務端採用了空間換時間(分配超大的使用者資料陣列,然後通過使用者連線的檔案描述符即可以索引到使用者資料)

客戶端程式:

#define _gnu_source 1//為了支援pollrdhup事件

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define buffer_size 64

using namespace std;

int main(int argc,char* ar**);

int setnonblocking(int fd)

int main(int argc,char* ar**)

fds[0].fd=listenfd;

fds[0].events=pollin|pollerr;//監聽埠註冊可讀和錯誤事件

fds[0].revents=0;

while(1)//這裡會出現乙個問題就是若某個使用者a頻繁傳送訊息給服務端服務端,再**給其它使用者,此期間其它使用者也有話要說,則服務端可讀事件全被a使用者占領了,其它使用者全是pollout事件  

聊天室程式

伺服器 include include include include include include include include define servport 8081 伺服器端口號 define bufsize 200 最大傳輸量 int main int args,char argv s...

基於UDP聊天室程式

基於udp聊天室程式使用socket程式設計實現。windows套接字在兩種模式下執行i o操作,阻塞和非阻塞。在阻塞模式下,在i o操作完成前,執行操作的winsock函式會一直等待下去 如recvfrom,wsarecvfrom函式 不會立即返回程式 將控制權交還給程式 而在非阻塞模式下,win...

用CSocket實現聊天室程式

基本上是照著書上做的 花了10天左右反覆閱讀 基本搞懂後才除錯 雖然書上有很詳細的 但是有些東西還是不全 比如標頭檔案 還有vc6.0和2005的小差別 比如unicode編碼問題 send函式的第2個引數要 2 還有書上也有錯的地方 當你理解了書上 時就能找出 敲完執行時還遇到了亂碼問題 在csd...