xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 4KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-05-12
  • 語言: 其他
  • 標(biāo)簽: Linux??socket??TCP??

資源簡介

在學(xué)習(xí)《UNIX網(wǎng)絡(luò)編程》基礎(chǔ)上自己動(dòng)手實(shí)現(xiàn)TCP服務(wù)器和客戶端通訊,這個(gè)版本是進(jìn)階版程序——實(shí)現(xiàn)多個(gè)客戶端的之間的通訊。程序包含了常規(guī)網(wǎng)絡(luò)通訊的主要步驟,除此之外還運(yùn)用了select()和poll()等技術(shù),具有一定難度,程序思路清晰,代碼注釋詳細(xì),適合有一定基礎(chǔ)的人學(xué)習(xí)。代碼已經(jīng)無誤通過測試。初學(xué)者可以休息我的入門版程序——實(shí)現(xiàn)單個(gè)客戶端的之間的通訊,可見我的其他資源。

資源截圖

代碼片段和文件信息

/*服務(wù)器端程序:一個(gè)服務(wù)器和多個(gè)客戶端通訊(復(fù)用)*/

#include????
#include????
#include????
#include????
#include????
#include????
#include????

#include?
#include?
#include?

#define?BUFFER_SIZE?1024????

int?main(int?argc?const?char?*?argv[])????
{???
????int?in;
????int?connfdsockfd;
????struct?epoll_event?evevents[20];?//ev用于注冊事件數(shù)組用于回傳要處理的事件,告訴內(nèi)核要監(jiān)聽什么事
????//============創(chuàng)建一個(gè)epoll的句柄,其中256為你epoll所支持的最大句柄數(shù)==========
????int?epfd=epoll_create(256);//創(chuàng)建一個(gè)epoll的句柄,其中256為你epoll所支持的最大句柄數(shù)

????struct?sockaddr_in?client_addr;
????struct?sockaddr_in?server_addr;????

????server_addr.sin_family?=?AF_INET;????
????server_addr.sin_port?=?htons(11277);????
????server_addr.sin_addr.s_addr?=INADDR_ANY;????
????bzero(&(server_addr.sin_zero)?8);????

????int?server_sock_fd?=?socket(AF_INET?SOCK_STREAM?0);??

????ev.data.fd=server_sock_fd; //設(shè)置與要處理的事件相關(guān)的文件描述符
????//ev.events=EPOLLIN|EPOLLOUT|EPOLLET; //設(shè)置要處理的事件類型,可讀可寫
ev.events=EPOLLIN|EPOLLET; //設(shè)置要處理的事件類型先監(jiān)聽狀態(tài),讀數(shù)據(jù)然后再根據(jù)需求修改
//============注冊epoll事件====================
????epoll_ctl(epfdEPOLL_CTL_ADDserver_sock_fd&ev);

????if(server_sock_fd?==?-1)????
????{????
????????perror(“socket?error“);????
????????return?1;????
????}????

????char?recv_msg[BUFFER_SIZE];????
????char?input_msg[BUFFER_SIZE];????

????if(connect(server_sock_fd?(struct?sockaddr?*)&server_addr?sizeof(struct?sockaddr_in))?==?0)????
????{????
????????for(;;)
????????{
//================等待epoll事件的發(fā)生=================
????????????int?nfds=epoll_wait(epfdevents20500);
????????????for(i=0;i????????????{????
????????????????if(events[i].events&EPOLLOUT)? //監(jiān)測事件類型,若有數(shù)據(jù)發(fā)送,寫socket
????????????????{
printf(“send?message?to?server:?“);
????????????????????bzero(input_msg?BUFFER_SIZE);????
????????????????????fgets(input_msg?BUFFER_SIZE?stdin);????

????????????????????sockfd?=?events[i].data.fd;
????????????????????//write(sockfd?recv_msg?n);
write(sockfd?input_msg?BUFFER_SIZE);
//send(sockfdinput_msgBUFFER_SIZE0);

????????????????????ev.data.fd=sockfd;
????????????????????ev.events=EPOLLIN|EPOLLET; //寫完數(shù)據(jù)后,將事件類型變?yōu)樽x操作
????????????????????epoll_ctl(epfdEPOLL_CTL_MODsockfd&ev); //修改后需要重新注冊,這里使用EPOLL_CTL_ADD就會出錯(cuò)
????????????????}???

????????????????else?if(events[i].events&EPOLLIN) //監(jiān)測事件類型,若有數(shù)據(jù)到來,讀socket
????????????????{
????????????????????bzero(recv_msg?BUFFER_SIZE);
????????????????????if((n?=?read(server_sock_fd?recv_msg?BUFFER_SIZE))?<0?)
????????????????????{
????????????????????????printf(“read?error!“);
????????????????????}?

????????????????????ev.data.fd=server_sock_fd;
????????????????????ev.events=EPOLLOUT|EPOLLET; //讀完數(shù)據(jù)后,將事件類型變?yōu)閷懖僮?br/>????????????????????printf(“message?from?server:?%s\n“recv_msg);
epoll_ctl(epfdEPOLL_CTL_MODserver_sock_fd&ev); //修改后需要重新注冊,這里使用EPOLL_CTL_ADD就會出錯(cuò)
????????????????}

????????????}????????
????????}
????}????
????return?0;????
}???

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----

?????文件???????6937??2018-06-10?17:15??server5.c

?????文件???????3513??2018-06-10?17:20??client5.c

-----------?---------??----------?-----??----

????????????????10450????????????????????2


評論

共有 條評論

相關(guān)資源