456成人影院在线观看_亚洲a毛片_日韩9999_伊人网老司机_一本免费视频_最近高清日本免费

IT之道-艾銻知道

您當前位置: 主頁 > IT服務 > 網絡服務 >

基于Linux的多線程Web服務器端


2015-11-09 09:00 作者:admin 瀏覽量:

  Web服務端是用的多線程并發方式,而沒有使用IOCP或epoll模型,因為客服端和服務端交換1次數據后就立即斷開連接,沒有足夠時間發揮IPCP或epoll的優勢。(IT外包服務

  在服務端和客服端保持較長連接的前提下頻繁發送大小不一的消息時(最典型的就是網游服務器),才能真正發揮出這2種模型的優勢。

  // // main.cpp // hello_server // // Created by app05 on 15-10-27. // Copyright (c) 2015年 app05. All rights reserved. // #include #include #include #include #include #include #include #define BUF_SIZE 1024 #define SMALL_BUF 100 void * request_handler(void * arg); //線程入口函數 void send_data(FILE *fp, char * ct, char * file_name); //向瀏覽器客服端發送數據 char * content_type(char *file); //數據類型 void send_error(FILE *fp); //發送錯誤處理數據 void error_handling(char *message); //控制臺錯誤打印 int main(int argc, char *argv[]) { int serv_sock, clnt_sock; struct sockaddr_in serv_adr, clnt_adr; socklen_t clnt_adr_sz; char buf[BUF_SIZE]; pthread_t t_id; if (argc != 2) { printf("Usage : %s \n", argv[0]); exit(1); } serv_sock = socket(PF_INET, SOCK_STREAM, 0); memset(&serv_adr, 0, sizeof(serv_adr)); serv_adr.sin_family = AF_INET; serv_adr.sin_addr.s_addr = htonl(INADDR_ANY); serv_adr.sin_port = htons(atoi(argv[1])); if(bind(serv_sock, (struct sockaddr *) &serv_adr, sizeof(serv_adr)) == -1) error_handling("bind() error"); if(listen(serv_sock, 5) == -1) error_handling("listen() error"); while (1) { clnt_adr_sz = sizeof(clnt_adr); clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_adr, &clnt_adr_sz); printf("Connection Request: %s : %d\n", inet_ntoa(clnt_adr.sin_addr), ntohs(clnt_adr.sin_port));//連接的客服端IP與端口 //多線程 pthread_create(&t_id, NULL, request_handler, (void*) &clnt_sock); pthread_detach(t_id); } close(serv_sock); return 0; } //客服端請求消息處理 void * request_handler(void *arg) { int clnt_sock = *((int *)arg); char req_line[SMALL_BUF]; FILE *clnt_read; FILE *clnt_write; char method[10]; char ct[15]; char file_name[30]; /*將套接字轉換為標準I/O操作*/ clnt_read = fdopen(clnt_sock, "r"); clnt_write = fdopen(dup(clnt_sock), "w"); fgets(req_line, SMALL_BUF, clnt_read);//保存請求行數據 if (strstr(req_line, "HTTP/") == NULL) //查看是否為HTTP提出的請求 { send_error(clnt_write); fclose(clnt_read); fclose(clnt_write); return NULL; }(IT外包)

  strcpy(method, strtok(req_line, " /")); //請求方式 strcpy(file_name, strtok(NULL, " /")); //請求的文件名 strcpy(ct, content_type(file_name)); //請求內容類型 if (strcmp(method, "GET") != 0) //是否為GET請求 { send_error(clnt_write); fclose(clnt_read); fclose(clnt_write); return NULL; } fclose(clnt_read); send_data(clnt_write, ct, file_name); //響應給客服端 return NULL; } //服務端響應消息 void send_data(FILE *fp, char *ct, char *file_name) { char protocol[] = "HTTP/1.0 200 OK\r\n"; //狀態行(用HTTP1.1版本進行響應,你的請求已經正確處理) char server[] = "Server: Linux Web Server \r\n"; //服務端名 char cnt_len[] = "Content-length: 2048\r\n"; //數據長度不超過2048 char cnt_type[SMALL_BUF]; char buf[BUF_SIZE]; FILE *send_file; sprintf(cnt_type, "Content-type: %s\r\n\r\n", ct); send_file = fopen(file_name, "r"); //讀本地配置文件 if (send_file == NULL) { send_error(fp); return; } /*傳輸頭信息*/ fputs(protocol, fp); fputs(server, fp); fputs(cnt_len, fp); fputs(cnt_type, fp); /*傳輸請求數據*/ while (fgets(buf, BUF_SIZE, send_file) != NULL) { fputs(buf, fp); fflush(fp); } fflush(fp); fclose(fp); //服務端響應客服端請求后立即斷開連接(短鏈接) } //請求數據的類型 char * content_type(char *file) { char extension[SMALL_BUF]; char file_name[SMALL_BUF]; strcpy(file_name, file); strtok(file_name, "."); strcpy(extension, strtok(NULL, ".")); if (!strcmp(extension, "html") || !strcmp(extension, "htm")) return "text/html"; //html格式的文本數據 else return "text/plain"; } //發送客服端錯誤處理 void send_error(FILE *fp) { char protocol[] = "HTTP/1.0 400 Bad Request\r\n"; //請求文件不存在 char server[] = "Server: Linux Web Server \r\n"; char cnt_len[] = "Content-length: 2048\r\n"; char cnt_type[] = "Content-type: text/html\r\n\r\n"; char content[] = "發生錯誤!查看請求文件名和請求方式!"; fputs(protocol, fp); fputs(server, fp); fputs(cnt_len, fp); fputs(cnt_type, fp); fputs(content, fp); fflush(fp); fclose(fp); } //控制臺錯誤打印 void error_handling(char *message) { fputs(message, stderr); fputc('\n', stderr); exit(1); }

  打開瀏覽器,地址欄輸入服務端的IP,端口,請求的文件名信息訪問服務器:http://192.168.0.185:8389/index.html。(測試:index.html:在本地用記事本自己隨便寫點東西保存為html格式即可)(網絡管理外包

  

制作HTTP服務器端

  艾銻無限是中國領先IT外包服務商,專業為企業提供IT運維外包、電腦維護網絡維護、網絡布線、辦公設備維護、服務器維護數據備份恢復、門禁監控、網站建設等多項IT服務外包,服務熱線:400-650-7820 聯系電話:010-62684652 咨詢QQ2050684097;1548853602 地址:北京市海淀區北京科技會展2號樓16D,用心服務每一天,為企業的發展提升更高的效率,創造更大的價值。

  更多的IT外包信息盡在艾銻無限http://m.whgoodly.com


相關文章

IT外包服務
二維碼 關閉
主站蜘蛛池模板: 久久精品操_国产成人无码精品久久久小说_亚洲精品AV一区午夜福利_久久人人做_好硬啊进去太深了A片_国产在线视频一区二区_性欧美丰满熟妇XXXX性_国产精品探花在线观看 | 日韩精品无码一区二区三区四区_九色永久网址_亚洲成色WWW成人网站妖精_女教师《枫可怜》av_老司机午夜免费_国产91一区二区三区_国产香蕉视频在线_久久97视频 | 日本熟妇人妻xxxxx_日本人伦一区二区三区_久久另类_欧美激情影音先锋_草久久精品_亚洲va天堂va在线va欧美_欧美GAY猛男GAYA片18禁_欧美性久久久 | 麻豆蜜桃_欧美黑人巨大久久久精品一区小蓝_久久青草av_成年人xxxx_狠狠躁夜夜躁人人爽天天开心婷婷_午夜一区在线观看_青草网址_小视频在线看 | 欧美精产国品一二三类产品特点_久久久亚洲精品一区二区三区_夭天干天天躁天天摸_AV在线观看_免费毛片av_成人AV免费视频_91色伦_日本aaaa片毛片免费观看视频 | 亚洲中文久久精品81_桃子视频在线观看免费视频网_免费看国产视频_美男被强行糟蹋np各种play_久久中文字幕无码A片不卡男同_久久三级_麻豆精品在线视频_在线小视频 | 午夜国产在线观看_69xx视频在线观看_五月久久六月婷婷俺也去_国产精品一区二区日韩新区_国产精品第一页爽爽影院_靠比视频免费观看_日本少妇裸体视频_伊人成人在线 | 日本精品在线免费观看_久久综合射_久久久橹橹橹久久久久高清_青青操五月天_多人伦精品一区二区三区视频_久久精品中文无码资源站_99久久这里有精品_秋霞理论福利院 | 亚洲毛片一区二区_天天爱天天做天天添天天欢_黄视频福利_午夜影皖精品av在线播放_国产精品免费一区二区区_乱肉妇精品av_浮生影视在线观看免费_大波妺av网站影院 | 欧美成人毛片_日本精品免费_很黄很爽的视频网站_91午夜免费视频_5060午夜一级_日本3级片_日本a级影片_日本中文字幕精品 | 国产凹凸在线一区二区_中国一级淫片bbb_亚洲另类春色国产精品_九九九视频精品_日日干干夜夜_992tv免费观看线路1_亚洲黄网在线观看_91成品视频 | 日本高清网色_日本高清免费一本在线观看_日本高清久久久_精品久久久久久_91女神在线视频_国产青青_国产高清一级毛片在线不卡_色中文字幕在线 | 精品一区二区三区日本视频_yp最新网站入口_精品一区国产VR_曰本人做爰大片免费观看_久久久资源_在线国产网址_九九视频免费观看_一级黄色在线 | 成人资源在线_无限动漫视频在线观看免费动漫_久久国产二区_美日韩一区二区_亚洲久久视频_少妇高潮呻吟在线观看_国产亚洲2021成人乱码_日本成人久久久 | 亚洲视频一级片_欧美a网站_一级精品_91视频盛宴_一区二区不卡在线播放_国产精品久久久一区二区三区网站_国产在线不卡_国产偷啪自怕网 | 看免费的黄色大片_91精品一区二区在线观看_日韩入口_亚洲欧美日韩中文视频_夜夜操com_爱99久久_仙踪林久久久久久久999_一二三四视频中文字幕在线看 | 亚洲人成在久久综合网站_久久精品人人槡人妻人人玩_久久久www成人免费无遮挡大片_伊人久久综合精品久久_日本逼视频_色啪影院_日本污视频在线观看_av片在线免费看 | 男男网站18禁免费_网红主播精品视频在线观看_中文字幕av一区二区三区免费看_国产v亚洲v天堂无码_2021av在线_91黄色免费看_久久久久久成人_东北老女人高潮大叫对白 | 男女午夜猛烈啪啦啦视频_蜜臀成人av_国产精久久一区二区三区_国产农村乱_四虎永久在线精品国产馆v视影院_97欧美一乱一性一交一视频_av中出_中文无码乱人伦中文视频在线V | 成人影院在线看_在线三区_tai9国产一区二区_日韩中文字幕在线观看视频_亚洲最大色大成人av_好大好湿好硬顶到了好爽视频_97影院在线免费看_久碰香蕉线视频在线观看视频 | 神马午夜窝窝_婷婷色中文字幕综合在线_久久免费资源_亚洲一区二区二区久久成人婷婷_欧美日韩一区在线播放_天天草天天干天天_午夜嘿嘿嘿在线观看_一区二区三区成人 | 亚洲一区不卡在线_亚洲超高清大胆极品人体美女_无码精品国产一区二区三区免费_国产第91页_色呦呦免费_国产成人综合精品无码_日一级毛片_天天澡天天添天天摸97影院 | 性欧美8处一14处破_a级毛片在线看日本_91视频免费视频_亚洲AV永久无码天堂网毛片_欧美熟妇色ⅹxxx欧美妇_成人在色线视频在线观看免费大全_精品一区在线_免费看一及片 | 337p日本欧洲亚洲大胆艺术96_不卡高清AV手机在线观看_中文字幕888_综合久久综合_18gay男同69亚洲帅男蓝宇_国产成人精品福利视频_国产日韩欧美在线一区_久草www | 国产成A人亚洲精V品无码_在线观看色网_曰韩精品无码一区二区三区视频_18禁美女裸体网站无遮挡_九九免费精品视频_一区二区三区高清在线观看_免费国产视频_伊人久久大香线蕉AV不变影院 | 亚洲在线免费观看视频_野花社区观看在线www官网_热久久国产_亚洲国产精品无码观看久久_两个人的WWW免费视频_超乳爆乳上司在线观看_亚洲天堂一区在线观看_久久天天躁狠狠躁夜夜96流白浆 | 欧美人与动牲交免费观看_丝袜美女被遭强高潮网站_色欲天天天综合网_亚洲福利_久久三级影院_国产乱子伦在线观看免费_国产精品成人一区二区_久久久日韩精品一区二区 | www.日日操_国产精品综合久久第一页_国产碰碰_avtt天堂网人妻系列_国产亚洲精品久久久久久无挡照片_久热草视频_人妻被修空调在夫面侵犯_欧美丰满熟妇xxxx性 | 夜鲁夜鲁很鲁在线视频视频_深夜福利免费看_天天骑天天干_亚洲精品无码一区二区四区_天天爽夜夜爽成人爽_欧美视频色_996热re视频精品视频这里_天天摸夜夜添夜夜无码 | 永久黄软件免费观看_国产三级久久久久_欧美精品无码久久久潘金莲_成人一级大片_午夜免费福利片_亚洲综合一区国产精品_亚洲av日韩精品久久久久_哥也色视频 | 99精品偷拍视频一区二区三区_永久免费黄色_第一视角vk_日韩一级黄色大片_中文字幕高清视频_国产精品久久久久久久久绿色_婷婷久久久亚洲欧洲日产国码AV_国内精品久久久久精品 | 欧美黄视频网站_亚洲三级黄色片_亚洲精品一区二区网址_在线sese_无码福利日韩神码福利片_在线亚洲无砖砖区免费_在线一区二区三区精品_青草青青在线视频 | 亚洲精品久久激情国产片_中国大陆黄色片_日韩久久无码免费看A_久久99视频免费_少妇精品久久久一区二区三区_欧美一级性爱免费观看_91免费观看在线_久操新在线 | 手机毛片网_一级毛片大全免费播放_精国品产一区二区三区有限公司_在线观看黄动漫_日本三级视频网站_羞羞答答av_奇米影视777me_欧美日韩在线观看免费 | 国产成人无遮挡在线视频_在线观看亚洲欧美视频免费_3d动漫精品久久一区二区_亚洲国产成人精_日韩一级黄色录像_久久男人av资源网站无码_孕妇奶水仑乱A级毛片在线播放_欧美视频在线观看免费 | 人妻AV无码一区二区三区_99激情网_亚洲第一无码xxxxxx_131美女MM爱做爽爽爽视频_a级毛片高清免费视频在线_久草com_久久久亚洲精品中文字幕_一区二区三区在线不卡 | 蜜桃av片_自拍偷拍亚洲视频_成人免费无码大片A毛片_午夜网站免费_亚洲二级片_中文字幕けのぁ一般男女_亚洲国产精品成人女人久久久_久久国产精品精品国产 | 91超碰免费在线_日韩1级_18av在线免费观看_午夜在线免费观看视频_日本丰满大乳人妻无码_久久久黑人_久久人人爽爽爽人久久久_国产精品乱子伦xxxx裸 | 亚洲在线免费观看视频_野花社区观看在线www官网_热久久国产_亚洲国产精品无码观看久久_两个人的WWW免费视频_超乳爆乳上司在线观看_亚洲天堂一区在线观看_久久天天躁狠狠躁夜夜96流白浆 | 日本最新一区二区三区视频观看_蜜桃视频麻豆_亚洲国产日韩A在线播放_亚洲女av_免费日本在线观看_91精品视频在线免费观看_久久久久久蜜桃一区二区_成人在线国产 | 123区在线_bb日韩美女预防毛片视频_程视频精品视频一区二区三区欧_欧美一区日本一区韩国一区_久久久er热这里只有精品2_欧美精品一区二区免费_久久精品亚洲精品艾草网_男人的天堂官网 |