乙個poll的簡單例子

2021-07-04 21:07:38 字數 3041 閱讀 8088

該程式使用poll事件機制實現了乙個簡單的訊息回顯的功能,其伺服器端和客戶端的**如下所示:

伺服器端:

//start from the very beginning,and to create greatness

//@author: chuangwei lin

//@e-mail:[email protected]

//@brief: 乙個poll的簡單例子,服務端

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//錯誤輸出巨集

#define err_exit(m) \

do \

while(0)

//pollfd結構體

//struct pollfd

//動態陣列

typedef

std::vector

pollfdlist;

int main(void)

//填充位址

struct sockaddr_in servaddr;

memset(&servaddr, 0, sizeof(servaddr));//先清零

servaddr.sin_family = af_inet;//協議族

servaddr.sin_port = htons(5188);//埠號

servaddr.sin_addr.s_addr = htonl(inaddr_any);//本地的ip

int on = 1;

//int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);

//sockfd:標識乙個套介面的描述字。

//level:選項定義的層次;支援sol_socket、ipproto_tcp、ipproto_ip和ipproto_ipv6。

//optname:需設定的選項。

//optval:指標,指向存放選項待設定的新值的緩衝區。

//optlen:optval緩衝區長度。

if (setsockopt(listenfd, sol_socket, so_reuseaddr, &on, sizeof(on)) < 0)

if (bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0)

if (listen(listenfd, somaxconn) < 0)

//poll

struct pollfd pfd;

pfd.fd = listenfd;

pfd.events = pollin;//關注pollin事件,表明有事件可讀

pollfdlist pollfds;//建立乙個動態陣列(向量)

pollfds.push_back(pfd);//把檔案描述符新增到陣列裡面

int nready;

struct sockaddr_in peeraddr;

socklen_t peerlen;

int connfd;

while (1)

if (nready == 0) //無事件發生

continue;

if (pollfds[0].revents & pollin)//監聽的pollin事件到來

//遍歷檢視哪些已連線套接字產生事件(迭代器)

for (pollfdlist::iterator it=pollfds.begin()+1;it != pollfds.end() && nready >0; ++it)

;int ret = read(connfd, buf, 1024);//讀取訊息內容

if (ret == -1)//出錯

err_exit("read");

if (ret == 0)//

std::cout

/列印收到的訊息內容

write(connfd, buf, strlen(buf)); }}

}return

0;}

客戶端:

//start from the very beginning,and to create greatness

//@author: chuangwei lin

//@e-mail:[email protected]

//@brief: 乙個poll的簡單例子,客戶端

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define err_exit(m) \

do \

while(0)

int main(void)

; char recvbuf[1024] =;

while (fgets(sendbuf, sizeof(sendbuf), stdin) != null)

close(sock);

return

0;}

開啟伺服器,之後執行客戶端,結果如下:

伺服器:

客戶端:

乙個簡單css例子

lang en charset utf 8 css講解title rel stylesheet href style.css body div dd xddaa hover abc ulli first child ulli last child ulli nth child 3 ulli only...

乙個簡單的json例子

名稱 年齡郵箱 response.setcontenttype text html charset utf 8 response.setheader cache control no cache jsonobject json new jsonobject try json.put jobs mem...

KNN乙個簡單的例子

對未知類別屬性的資料集中的每個點依次執行以下操作 import numpy as np import operator def createdataset group np.array 1.0,1.1 1.0,1.0 0,0 0,0.1 labels a a b b return group,lab...