程式功能:監聽tcp客戶端連線,並用epoll監聽這些客戶端傳送的資料,相當於乙個日誌接收器
#include #include #include #include #include #include #include #include #include #include #include #define max_event 20
#define buff_size 100*1024
//epoll控制代碼
int epfd = 0;
void add_epoll_socket(int fd, epoll_events et);
void delete_epoll_socket(int fd, epoll_events et);
int main(int argc, char *ar**)
//建立服務端socket,監聽埠:ar**[1]
int serv_sock=socket(pf_inet, sock_stream, 0);
if(serv_sock == -1)
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family=af_inet;
serv_addr.sin_addr.s_addr=htonl(inaddr_any);
serv_addr.sin_port=htons(atoi(ar**[1]));
if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1)
if(listen(serv_sock, 5)==-1)
//建立epoll控制代碼
epfd = epoll_create(max_event);
if (epfd < 0)
add_epoll_socket(serv_sock, epollin);
int i, ret, len, fd;
struct epoll_event events[max_event];
char buff[buff_size] = ;
char log[buff_size] = ;
char *begin, *end;
while (1)
char *addr = inet_ntoa(client_addr.sin_addr);
printf("client_sock=%d, addr=%s\n", client_sock, addr);
//不監聽回送連線
if (strcmp(addr, "127.0.0.1") != 0)
}else
printf("buff='%s'\n", buff);
memset(buff, 0, buff_size);
}} //for
} //while (1)
close(epfd);
close(serv_sock);
return 0;
}void add_epoll_socket(int fd, epoll_events evt)
void delete_epoll_socket(int fd, epoll_events evt)
單程序tcp伺服器 epoll版
1 沒有最大併發連線的限制,能開啟的fd 指的是檔案描述符,通俗的理解就是套接字對應的數字編號 的上限遠大於1024。2 效率提公升,不是輪詢的方式,不會隨著fd數目的增加效率下降。只有活躍可用的fd才會呼叫callback函式 即epoll最大的優點就在於它只管你 活躍 的連線,而跟連線總數無關,...
TCP伺服器實現epoll併發實現
原始碼在最下方 併發伺服器 tcp伺服器百萬級連線 申請乙個int sockfd socket af inet,sock stream,0 初始化乙個例項sockaddr in struct sockaddr in addr memset addr,0,sizeof struct sockaddr ...
tcp 客戶 伺服器程式示例
1 client 從標準輸入讀入一行文字,並寫給伺服器。2 伺服器從網路輸入讀入這行文字,並回射給客戶。3 客戶從網路輸入讀入這行回射的文字,顯示在標準輸出上 標準輸入 fgets tcp 客戶 write read tcp 伺服器 標準輸出 fputs tcp 客戶 read write tcp ...