該程式使用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...