当前位置: 首页 > news >正文

建设外贸企业网站wordpress 小学生

建设外贸企业网站,wordpress 小学生,阿里云虚拟主机wordpress建站,河南周口东宇网站建设实现简单的Web服务器端 现在开始在HTTP协议的基础上编写Web服务器端。先给出Windows平台下的示例#xff0c;再给出Linux下的示例。在这里我假设各位都有了有关HTTP的知识#xff0c;如果不知道HTTP协议的具体内容可以参考的往期博客#xff0c;有了这些基础就不难分析源代…实现简单的Web服务器端 现在开始在HTTP协议的基础上编写Web服务器端。先给出Windows平台下的示例再给出Linux下的示例。在这里我假设各位都有了有关HTTP的知识如果不知道HTTP协议的具体内容可以参考的往期博客有了这些基础就不难分析源代码。因此除了一些简单的注释外不再另行说明代码。 实现基于Windows的多线程Web服务器端 Web服务器端采用HTTP协议即使用IOCP或epoll模型也不会大幅提升性能当然并不是完全没有。客户端和服务器端交换1次数据后将立即断开连接没有足够时间发挥IOCP或epoll的优势。在服务器端和客户端保持较长连接的前提下频繁发送大小不一的消息时最典型的就是网游服务器端才能真正发挥出这2种模型的优势。 因此我通过多线程模型实现Web服务器端。也就是说客户端每次请求时都创建1个新线程响应客户端请求。 #includestdio.h #includestdlib.h #includestring.h #includewinsock2.h #include process.h#define BUF_SIZE 2048 #define BUF_SMALL 100unsigned WINAPI RequestHandler(void* arg); char* ContentType(char* file); void SendData(SOCKET sock,char* ct, char* fileName); void SendErrorMSG(SOCKET sock); void ErrorHandling(char *message);int main(int argc, char *argv[]){WSADATA wsaData;SOCKET hServSock,hClntSock;SOCKADDR_IN servAdr, clntAdr;HANDLE hThread;DWORD dwThreadID;int clntAdrSize;if(argc!2){printf(Usage : %s port\n, argv[0]);exit(1);}if(WSAStartup(MAKEWORD(2,2),wsaData)!0)ErrorHandling(WSAStartup() error!);hServSocksocket(PF_INET,SOCK_STREAM, 0);memset(servAdr,0, sizeof(servAdr));servAdr.sin_familyAF_INET;servAdr.sin_addr.s_addrhtonl(INADDR_ANY);servAdr.sin_porthtons(atoi(argv[1]));if(bind(hServSock,(SOCKADDR*)servAdr, sizeof(servAdr))SOCKET_ERROR)ErrorHandling(bind() error);if(listen(hServSock, 5)SOCKET_ERROR)ErrorHandling(listen() error);/*请求及响应*/while(1){clntAdrSizesizeof(clntAdr);hClntSockaccept(hServSock,(SOCKADDR*)clntAdr, clntAdrSize);printf(Connection Request : %s:%d\n,inet_ntoa(clntAdr.sin_addr),ntohs(clntAdr.sin_port));hThread(HANDLE)_beginthreadex(NULL,0,RequestHandler,(void*)hClntSock,0,(unsigned *)dwThreadID);}closesocket(hServSock);WSACleanup();return 0; }unsigned WINAPI RequestHandler(void *arg){SOCKET hClntSock(SOCKET)arg;char buf[BUF_SIZE];char method[BUF_SMALL];char ct[BUF_SMALL];char fileName[BUF_SMALL];recv(hclntsock, buf, BUF_SIZE, 0);if(strstr(buf,HTTP/)NULL){//查看是否是HTTP提出的请求SendErrorMSG(hClntSock);closesocket(hClntSock);return 1;}strcpy(method,strtok(buf,/));if(strcmp(method,GET))//我这里只实现了GET的请求方式SendErrorMSG(hClntSock);strcpy(fileName,strtok(NULL,”/“)) //查看请求文件名strcpy(ct,ContentType(fileName)); //查看Content-typeSendData(hClntSock, ct, fileName); //响应return 0; }void SendData(SOCKET sock, char* ct, char* fileName){char protocol[]HTTP/1.0 200 OK\r\n;char servName[]Server:simple web server\r\n;char cntLen[]Content-length:2048\r\n;char cntType[BUF_SMALL];char buf[BUF_SIZE];FILE* sendFile;sprintf(cntType,Content-type:%s\r\n\r\n,ct);if((sendFilefopen(fileNamer))NULL){SendErrorMSG(sock);return;}/*传输头信息*/send(sock, protocol, strlen(protocol),0);send(sock, servName, strlen(servName),0);send(sock, cntLen,strlen(cntLen),0);send(sock, cntType, strlen(cntType), 0);/*传输请求数据*/while(fgets(buf, BUF_SIZE, sendFile)!NULL)send(sock,buf, strlen(buf),0);closesocket(sock);//由HTTP协议响应后断开 }void SendErrorMSG(SOCKET sock){//发生错误时传递消息char protocol[]HTTP/1.0 400 Bad Request\r\n;char servName[]Server:simple web server\r\n;char cntLen[]Content-length:2048\r\n;char cntType[]Content-type:text/html\r\n\r\n;char content[]htmlheadtitleNETWORK/title/headbodyfont size5br发生错误查看请求文件名和请求方式/font/body/html;send(sock, protocol, strlen(protocol),0);send(sock,servName,strlen(servName),0);send(sock, cntLen, strlen(cntLen),0);send(sock, cntType,strlen(cntType),0);send(sock, content,strlen(content),0);closesocket(sock); }char* ContentType(char* file){ //区分Content-typechar extension[BUF_SMALL];char fileName[BUF_SMALL];strcpy(fileName, file);strtok(fileName,.);strcpy(extension, strtok(NULL,.));if(!strcmp(extension, html)||!strcmp(extension,htm))return text/html;elsereturn text/plain; }void ErrorHandling(char* message){fputs(message, stderr);fputc(\n, stderr);exit(1); } 大家可以通过浏览器来访问一下自己的HTTP服务器尝试一下结果。 实现基于 Linux的多线程Web服务器端 Linux下的Web服务器端与上述示例不同将使用标准I/O函数。在此列出的目的主要是为了 让各位多复习各种知识点没有任何特殊含义。 #includestdio.h #includestdlib.h #includeunistd.h #includestring.h #includearpa/inet.h #includesys/socket.h #include pthread.h#define BUF_SIZE 1024 #define SMALL_BUF 100void* 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;int clnt_adr_size;char buf[BUF_SIZE];pthread_t t_id;if(argc!2){printf(Usage :%s port\n, argv[0]);exit(1);}serv_socksocket(PF_INET, SOCK_STREAM, 0);memset(serv_adr, 0, sizeof(serv_adr));serv_adr.sin_familyAF_INET;serv_adr.sin_addr.s_addrhtonl(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,20)-1)error_handling(listen() error);while(1){clnt_adr_sizesizeof(clnt_adr);clnt_sockaccept(serv_sock, (struct sockaddr*)clnt_adr, clnt_adr_size);printf(Connection Request : %s:%d\n,inet_ntoa(clnt_adr.sin_addr),ntohs(clnt_adr.sin_port));pthread_create(t_id, NULL, request_handler, 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];clnt_readfdopen(clnt_sock,r);clnt_writefdopen(dup(clnt_sock)w);fgets(reg_line, SMALL_BUF, clnt_read);if(strstr(req_line HTTP/)NULL){send_error(clnt_write);fclose(clnt_read);fclose(clnt_write);return;}strcpy(method, strtok(req_line/));if(strcmp(method,GET)!0){//判断是否为实现的GEI方法如果不是则结束连接send_error(clnt_write);fclose(clnt_read);fclose(clnt_write);return;}strcpy(file_name, strtok(NULL, /));strcpy(ct,content_type(file_name));fclose(clnt_read);//完成读半关闭send_data(clnt_write, ct, file_name); }void send_data(FILE* fp, char* ct, char* file _name){char protocol[]HTTP/1.0 200 oK\r\n;char server[]Server:Linux web Server \r\n;char cnt_len[]Content-length:2048\r\n;char cnt_type[SMALL_BUF];char buf[BUF_SIZE];FILE* send_file;sprintf(cnt_type, Content-type:%s\r\n\r\n,ct);send_filefopen(file_name,r);if(send_fileNULL){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(extensionhtm))return text/html;elsereturntext/plain; }void send_error(FILE* fp){char protocol[]HTTP/1.0 400 Bad Request\r\n;char server[]Server:Linux Web Server Ir\n;char cnt_len[]Content-length:2048\r\n;char cnt_type[]Content-type:text/html\r\n\r\n;char content[]htmlheadtitleNETWORK/title/headbodyfont size5br发生错误查看请求文件名和请求方式/font/body/html;fputs(protocol,fp);fputs(server,fp);fputs(cnt_len, fp);fputs(cnt_type,fp);fflush(fp); }void error_handling(char* message){fputs(message, stderr);fputc(\n, stderr);exit(1); }以上就是网络编程的所有知识大家也可以选择继续深入学习。
http://www.ho-use.cn/article/10819816.html

相关文章:

  • 常熟市住房建设局网站门户网站设计与开发
  • 做家常便饭网站韶关住房和城乡建设网站
  • 建工网官方网站标准网站建设哪家便宜
  • 微网站如何建立的地下城钓鱼网站怎么做
  • 可以做翻译兼职的网站有哪些wordpress服务器要求
  • 重庆秀山网站建设价格google chrome官网
  • 怎么建设网站最便宜公司网站简介怎么做
  • 山西推广型网站制作风铃网做微网站要钱吗
  • 动漫网站怎么做的郴州seo公司
  • 安徽外贸网站google建站网站建设论文3000字范文
  • 怎么建立图片的网站吗wordpress 插件 块
  • 网站建设维护费最新军事新闻热点事件
  • 创建一个网站需要什么wordpress小绿锁
  • 简述建设一个网站的具体步骤6桂林生活网二手房市场
  • 惠州网站建设教程自己做网站服务器多少钱
  • 网站开发中什么是站点青岛做网站eoe
  • 票务网站开发什么是门户类型的网站
  • 做视频素材网站网站结构是体现的
  • c2c网站特点wordpress建影视网站
  • 受欢迎的网站建设教程腾讯云lamp wordpress
  • 常州哪里做网站重庆响应式网站设计
  • 做网站还是做微信公众号厂房建设公司哪家好
  • 玉溪网站开发手机网站页面尺寸大小
  • 东莞浩智网站建设哪家好南宁在百度上建网站
  • 上海网站制作的模板网站设计报价
  • 网站空间ip需不需要备案汕头市专注网站建设
  • 合肥建站中小企业网络营销案例
  • 做外贸网站市场网页设计html代码大全python
  • 新建设电影院 网站锕锕锕锕锕锕锕好湿免费网址
  • 做网站素材在哪里找网站开发安卓开发