中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

自己做代練網(wǎng)站百度關(guān)鍵詞廣告怎么收費(fèi)

自己做代練網(wǎng)站,百度關(guān)鍵詞廣告怎么收費(fèi),嗶哩嗶哩網(wǎng)頁(yè)版怎么緩存,前端做網(wǎng)站需要的技能本項(xiàng)目就是基于TCP網(wǎng)絡(luò)通信搭建的。 TCP: 客戶端:socket(),connect(). 服務(wù)端:socket(),bind(),listen(),accept(). 下面代碼就是對(duì)原生API網(wǎng)絡(luò)套接字的封裝。需要熟悉原生API網(wǎng)絡(luò)套接字接口。 下面這段代碼,沒(méi)什么好講的,就不…

本項(xiàng)目就是基于TCP網(wǎng)絡(luò)通信搭建的。

TCP:

客戶端:socket(),connect().

服務(wù)端:socket(),bind(),listen(),accept().

下面代碼就是對(duì)原生API網(wǎng)絡(luò)套接字的封裝。需要熟悉原生API網(wǎng)絡(luò)套接字接口。

下面這段代碼,沒(méi)什么好講的,就不再講了。下面代碼會(huì)涉及文件描述符的相關(guān)設(shè)置,我會(huì)專出一篇文章,進(jìn)行講解。

#define MAX_LISTEN 1024
class Socket {private:int _sockfd;public:Socket():_sockfd(-1) {}Socket(int fd): _sockfd(fd) {}~Socket() { Close(); }int Fd() { return _sockfd; }//創(chuàng)建套接字bool Create() {// int socket(int domain, int type, int protocol)_sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (_sockfd < 0) {ERR_LOG("CREATE SOCKET FAILED!!");return false;}return true;}//綁定地址信息bool Bind(const std::string &ip, uint16_t port) {struct sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(port);addr.sin_addr.s_addr = inet_addr(ip.c_str());socklen_t len = sizeof(struct sockaddr_in);// int bind(int sockfd, struct sockaddr*addr, socklen_t len);int ret = bind(_sockfd, (struct sockaddr*)&addr, len);if (ret < 0) {ERR_LOG("BIND ADDRESS FAILED!");return false;}return true;}//開(kāi)始監(jiān)聽(tīng)bool Listen(int backlog = MAX_LISTEN) {// int listen(int backlog)int ret = listen(_sockfd, backlog);if (ret < 0) {ERR_LOG("SOCKET LISTEN FAILED!");return false;}return true;}//向服務(wù)器發(fā)起連接bool Connect(const std::string &ip, uint16_t port) {struct sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(port);addr.sin_addr.s_addr = inet_addr(ip.c_str());socklen_t len = sizeof(struct sockaddr_in);// int connect(int sockfd, struct sockaddr*addr, socklen_t len);int ret = connect(_sockfd, (struct sockaddr*)&addr, len);if (ret < 0) {ERR_LOG("CONNECT SERVER FAILED!");return false;}return true;}//獲取新連接int Accept() {// int accept(int sockfd, struct sockaddr *addr, socklen_t *len);int newfd = accept(_sockfd, NULL, NULL);//不需要獲取客戶端信息 就可以將他們置NULLif (newfd < 0) {ERR_LOG("SOCKET ACCEPT FAILED!");return -1;}return newfd;}//接收數(shù)據(jù)ssize_t Recv(void *buf, size_t len, int flag = 0) {// ssize_t recv(int sockfd, void *buf, size_t len, int flag);ssize_t ret = recv(_sockfd, buf, len, flag);if (ret <= 0) {//EAGAIN 當(dāng)前socket的接收緩沖區(qū)中沒(méi)有數(shù)據(jù)了,在非阻塞的情況下才會(huì)有這個(gè)錯(cuò)誤//EINTR  表示當(dāng)前socket的阻塞等待,被信號(hào)打斷了,if (errno == EAGAIN || errno == EINTR) {return 0;//表示這次接收沒(méi)有接收到數(shù)據(jù)}ERR_LOG("SOCKET RECV FAILED!!");return -1;}return ret; //實(shí)際接收的數(shù)據(jù)長(zhǎng)度}ssize_t NonBlockRecv(void *buf, size_t len) {return Recv(buf, len, MSG_DONTWAIT); // MSG_DONTWAIT 表示當(dāng)前接收為非阻塞。}//發(fā)送數(shù)據(jù)ssize_t Send(const void *buf, size_t len, int flag = 0) {// ssize_t send(int sockfd, void *data, size_t len, int flag);ssize_t ret = send(_sockfd, buf, len, flag);if (ret < 0) {if (errno == EAGAIN || errno == EINTR) {return 0;}ERR_LOG("SOCKET SEND FAILED!!");return -1;}return ret;//實(shí)際發(fā)送的數(shù)據(jù)長(zhǎng)度}ssize_t NonBlockSend(void *buf, size_t len) {if (len == 0) return 0;return Send(buf, len, MSG_DONTWAIT); // MSG_DONTWAIT 表示當(dāng)前發(fā)送為非阻塞。}//關(guān)閉套接字void Close() {if (_sockfd != -1) {close(_sockfd);_sockfd = -1;}}//創(chuàng)建一個(gè)服務(wù)端連接bool CreateServer(uint16_t port, const std::string &ip = "0.0.0.0", bool block_flag = false) {//1. 創(chuàng)建套接字,2. 綁定地址,3. 開(kāi)始監(jiān)聽(tīng),4. 設(shè)置非阻塞, 5. 啟動(dòng)地址重用if (Create() == false) return false;if (block_flag) NonBlock();if (Bind(ip, port) == false) return false;if (Listen() == false) return false;ReuseAddress();return true;}//創(chuàng)建一個(gè)客戶端連接bool CreateClient(uint16_t port, const std::string &ip) {//1. 創(chuàng)建套接字,2.指向連接服務(wù)器if (Create() == false) return false;if (Connect(ip, port) == false) return false;return true;}//設(shè)置套接字選項(xiàng)---開(kāi)啟地址端口重用void ReuseAddress() {// int setsockopt(int fd, int leve, int optname, void *val, int vallen)int val = 1;setsockopt(_sockfd, SOL_SOCKET, SO_REUSEADDR, (void*)&val, sizeof(int));val = 1;setsockopt(_sockfd, SOL_SOCKET, SO_REUSEPORT, (void*)&val, sizeof(int));}//設(shè)置套接字阻塞屬性-- 設(shè)置為非阻塞void NonBlock() {//int fcntl(int fd, int cmd, ... /* arg */ );int flag = fcntl(_sockfd, F_GETFL, 0);fcntl(_sockfd, F_SETFL, flag | O_NONBLOCK);}
};

http://m.risenshineclean.com/news/66035.html

相關(guān)文章:

  • 網(wǎng)站發(fā)展方向百度指數(shù)大數(shù)據(jù)分享平臺(tái)
  • 網(wǎng)站swf怎么做seo搜索引擎優(yōu)化原理
  • vs做網(wǎng)站連數(shù)據(jù)庫(kù)優(yōu)化推廣網(wǎng)站怎么做最好
  • 網(wǎng)站規(guī)劃與設(shè)計(jì)范文太原網(wǎng)站排名推廣
  • 國(guó)內(nèi)做外貿(mào)網(wǎng)站的有哪些資料遼寧網(wǎng)站建設(shè)
  • 網(wǎng)絡(luò)營(yíng)銷(xiāo)工作網(wǎng)站seo優(yōu)化價(jià)格
  • 直接做的黃頁(yè)視頻網(wǎng)站濟(jì)南seo優(yōu)化公司
  • 網(wǎng)站開(kāi)發(fā)用什么系統(tǒng)比較好seo是做什么工作內(nèi)容
  • 做app布局參考哪個(gè)網(wǎng)站紹興seo排名外包
  • 免費(fèi)行情軟件app網(wǎng)站mnu萬(wàn)網(wǎng)域名查詢工具
  • 做鞋子批發(fā)的網(wǎng)站有哪些強(qiáng)力搜索引擎
  • 第三方免費(fèi)做網(wǎng)站seo云優(yōu)化公司
  • 網(wǎng)站獲取訪客qq號(hào)碼怎么接app推廣的單子
  • app手機(jī)網(wǎng)站模板免費(fèi)下載網(wǎng)站seo外包公司有哪些
  • 關(guān)于做網(wǎng)站書(shū)籍關(guān)鍵詞組合工具
  • 大學(xué)生個(gè)人網(wǎng)站怎么做seo技術(shù)學(xué)院
  • 網(wǎng)站如何在工信部備案信息網(wǎng)站設(shè)計(jì)公司模板
  • 南通網(wǎng)站建設(shè)seo班級(jí)優(yōu)化大師
  • 南和網(wǎng)站建設(shè)公司最近國(guó)際時(shí)事熱點(diǎn)事件
  • 鄭州seo優(yōu)化網(wǎng)站seo優(yōu)化心得
  • 快速搭建網(wǎng)站的方法百度投訴中心
  • icp網(wǎng)站備案密碼找回百度統(tǒng)計(jì)數(shù)據(jù)
  • 做圖賺錢(qián)的網(wǎng)站創(chuàng)量廣告投放平臺(tái)
  • 哪個(gè)網(wǎng)站做布料好智能建站網(wǎng)站模板
  • 建設(shè)寧波市分行的互聯(lián)網(wǎng)網(wǎng)站國(guó)際新聞今天最新消息
  • 群暉nas可以做網(wǎng)站嗎如何建立網(wǎng)站平臺(tái)
  • 沈陽(yáng)網(wǎng)站建設(shè)推廣南京seo網(wǎng)絡(luò)推廣
  • 怎么用2013做網(wǎng)站谷歌廣告上海有限公司官網(wǎng)
  • 網(wǎng)站轉(zhuǎn)app免費(fèi)百度搜索風(fēng)云榜小說(shuō)總榜
  • 營(yíng)銷(xiāo)型網(wǎng)站收費(fèi)搜狗登錄入口