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

wordpress模板2018seo怎么优化关键词排名

wordpress模板2018,seo怎么优化关键词排名,上市公司网站建设分析,博客网站开发视频文章目录 零、效果展示一、服务器代码二、客户端代码三、知识点1.connect()2.socket()3.bind()4.send()5.recv() 四、改进方向五、跟练视频 零、效果展示 一个服务器作为中转站#xff0c;多个客户端之间可以相互通信。至少需要启动两个客户端。 三个客户端互相通信 一、服务… 文章目录 零、效果展示一、服务器代码二、客户端代码三、知识点1.connect()2.socket()3.bind()4.send()5.recv() 四、改进方向五、跟练视频 零、效果展示 一个服务器作为中转站多个客户端之间可以相互通信。至少需要启动两个客户端。 三个客户端互相通信 一、服务器代码 chatServer.cpp 函数socket()、bind()、listen()、accept()、read()、write() #include cstdio #include iostream #include string #include sys/epoll.h //epoll的头文件 #include sys/socket.h //socket的头文件 #include unistd.h //close()的头文件 #include netinet/in.h //包含结构体 sockaddr_in #include map //保存客户端信息 #include arpa/inet.h //提供inet_ntoa函数 using namespace std;const int MAX_CONNECT 5; //全局静态变量,允许的最大连接数struct Client{int sockfd; //socket file descriptor 套接字文件描述符 string username; };int main(){//创建一个epoll实例int epfd epoll_create1(0); //或老版本 epoll_create(1);if(epfd 0){perror(epoll create error);return -1;}//创建监听的socketint sockfd socket(AF_INET, SOCK_STREAM, 0);if(sockfd 0){ //若socket创建失败,则返回-1perror(socket error);return -1;}//绑定本地ip和端口struct sockaddr_in addr; //结构体声明,头文件是netinet/in.haddr.sin_family AF_INET;addr.sin_addr.s_addr htonl(INADDR_ANY);addr.sin_port htons(9999);int ret bind(sockfd,(struct sockaddr*)addr,sizeof(addr));if(ret 0){printf(bind error\n);cout 该端口号已被占用,请检查服务器是否已经启动。 endl;return -1;}cout 服务器中转站已启动,请加入客户端。 endl;//监听客户端ret listen(sockfd,1024);if(ret 0){printf(listen error\n);return -1;}//将监听的socket加入epollstruct epoll_event ev;ev.events EPOLLIN;ev.data.fd sockfd;ret epoll_ctl(epfd,EPOLL_CTL_ADD,sockfd,ev); //防御性编程方便出bug时快速定位问题if(ret 0){printf(epoll_ctl error\n);return -1;}//保存客户端信息mapint,Client clients;int clientCount 0; //添加一个客户端计数器//循环监听while(true){struct epoll_event evs[MAX_CONNECT];int n epoll_wait(epfd,evs,MAX_CONNECT,-1);if(n 0){printf(epoll_wait error\n);break;}for(int i 0; i n; i ){int fd evs[i].data.fd;//如果是监听的fd收到消息,则表示有客户端进行连接了if(fd sockfd){struct sockaddr_in client_addr;socklen_t client_addr_len sizeof(client_addr);int client_sockfd accept(sockfd, (struct sockaddr*) client_addr, client_addr_len);if(client_sockfd 0){printf(accept error,连接出错\n);continue;}//将客户端的socket加入epollstruct epoll_event ev_client;ev_client.events EPOLLIN; //检测客户端有没有消息过来ev_client.data.fd client_sockfd;ret epoll_ctl(epfd, EPOLL_CTL_ADD,client_sockfd,ev_client);if(ret 0){printf(epoll_ctl error\n);break;} //iner_ntoa() 将客户端的IP地址从网络字节顺序转换为点分十进制字符串clientCount; //有新的客户端加入时,增加计数器printf(客户端%d已连接: IP地址为 %s\n, clientCount, inet_ntoa(client_addr.sin_addr));//保存该客户端信息Client client;client.sockfd client_sockfd;client.username ;clients[client_sockfd] client;}else{char buffer[1024];int n read(fd, buffer, 1024);if(n 0){break; //处理错误}else if(n 0){//客户端断开连接close(fd);epoll_ctl(epfd,EPOLL_CTL_DEL, fd ,0);clients.erase(fd);}else{ // n 0string msg(buffer,n);//如果该客户端username为空,说明该消息是这个客户端的用户名if(clients[fd].username ){clients[fd].username msg;}else{string name clients[fd].username;//把消息发给其他所有客户端for(auto c:clients){if(c.first ! fd){string full_message [ name ] : msg;write(c.first, full_message.c_str(), full_message.length());//write(c.first,([ name ] : msg).c_str(),msg.size() name.size() 4);}}}}}}}//关闭epoll实例close(epfd);close(sockfd);return 0; }二、客户端代码 client.cpp 注意g编译时要加 -pthread 函数socket()、connect()、send()、recv() #include cstdio #include iostream #include cstring //memset()的头文件 #include sys/socket.h //socket(),connect()等函数的头文件 #include netinet/in.h //sockaddr_in的头文件 #include arpa/inet.h //inet_pton()函数的头文件 #include unistd.h //close()函数的头文件 #include pthread.h //pthread创建线程和管理线程的头文件 using namespace std;#define BUF_SIZE 1024 char szMsg[BUF_SIZE];//发送消息 void* SendMsg(void *arg){int sock *((int*)arg);while(1){//scanf(%s,szMsg);fgets(szMsg,BUF_SIZE,stdin); //使用fgets代替scanfif(szMsg[strlen(szMsg) - 1] \n){szMsg[strlen(szMsg)- 1] \0; //去除换行符}if(!strcmp(szMsg,QUIT\n) || !strcmp(szMsg,quit\n)){close(sock);exit(0);}send(sock, szMsg, strlen(szMsg), 0);}return nullptr; }//接收消息 void* RecvMsg(void * arg){int sock *((int*)arg);char msg[BUF_SIZE];while(1){int len recv(sock, msg, sizeof(msg)-1, 0);if(len -1){cout 系统挂了 endl;return (void*)-1;}msg[len] \0;printf(%s\n,msg);}return nullptr; }int main() {//创建socketint hSock;hSock socket(AF_INET, SOCK_STREAM, 0);if(hSock 0){perror(socket creation failed);return -1;}//绑定端口sockaddr_in servAdr;memset(servAdr, 0, sizeof(servAdr));servAdr.sin_family AF_INET;servAdr.sin_port htons(9999);if(inet_pton(AF_INET, 172.16.51.88, servAdr.sin_addr) 0){perror(Invalid address);return -1;}//连接到服务器if(connect(hSock, (struct sockaddr*)servAdr, sizeof(servAdr)) 0){perror(连接服务器失败);cout 请检查是否已启动服务器。 endl;return -1;}else{printf(已连接到服务器IP地址%s端口%d\n, inet_ntoa(servAdr.sin_addr), ntohs(servAdr.sin_port));printf(欢迎来到私人聊天室,请输入你的聊天用户名:);}//创建线程pthread_t sendThread,recvThread;if(pthread_create(sendThread, NULL, SendMsg, (void*)hSock)){perror(创建发送消息线程失败);return -1;}if(pthread_create(recvThread, NULL, RecvMsg, (void*)hSock)){perror(创建接收消息线程失败);return -1;}//等待线程结束pthread_join(sendThread, NULL);pthread_join(recvThread, NULL);//关闭socketclose(hSock);return 0; }三、知识点 1.connect() #include sys/types.h #include sys/socket.hint connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);connect()成功返回0失败返回-1 以下是一个简单的 TCP 客户端示例展示了如何使用 connect() 连接到服务器 #include stdio.h #include string.h #include sys/socket.h #include netinet/in.h #include arpa/inet.hint main() {int sockfd socket(AF_INET, SOCK_STREAM, 0);if (sockfd 0) {perror(Socket creation failed);return -1;}struct sockaddr_in server_addr;memset(server_addr, 0, sizeof(server_addr));server_addr.sin_family AF_INET;server_addr.sin_port htons(12345); // 服务器监听的端口inet_pton(AF_INET, 192.168.1.100, server_addr.sin_addr); // 服务器的IP地址if (connect(sockfd, (struct sockaddr *)server_addr, sizeof(server_addr)) 0) {perror(Connection failed);return -1;}printf(Connected to the server\n);// 之后可以使用sockfd进行数据传输close(sockfd); // 关闭套接字return 0; }在这个示例中客户端程序创建了一个套接字设置服务器的 IP 地址和端口然后尝试与服务器建立连接。如果 connect() 调用成功客户端就与服务器建立了连接并可以通过该套接字进行数据通信。 2.socket() 1.参数 int socket(int address_family, int type, int protocol);(1)address family ①AF_INETIPv4 网络协议。用于TCP/IP和UDP/IP网络通信。 ②AF_INET6IPv6 网络协议。用于TCP/IP和UDP/IP网络通信但支持IPv6地址。 ③AF_UNIX或AF_LOCAL本地通道通信。用于在同一台机器上的进程间通信。 2)type ①SOCK_STREAMTCP协议提供面向连接的稳定数据传输保证数据能够按顺序、完整地到达。 ②SOCK_DGRAMUDP协议提供无连接的数据传输服务。发送的是独立的消息不保证顺序或数据完整性。 ③SOCK_RAW提供原始网络协议访问。在网络模型中这种类型的套接字允许直接访问IP层通常用于网络协议的开发和测试。 (3)protocol默认协议填0 2.返回值 ①成功时socket() 返回一个非负整数即新创建的套接字文件描述符。 ②出错时返回 -1并设置全局变量 errno 以表示具体的错误类型。 3.创建一个使用IPv4地址和TCP协议的套接字 int sockfd socket(AF_INET, SOCK_STREAM, 0); if (sockfd -1) {perror(socket creation failed); }这里AF_INET 指定使用IPv4地址SOCK_STREAM 指定使用面向连接的数据传输方式(TCP)0 表示自动选择使用TCP协议。 3.bind() 4.send() 发送数据将数据放到发送缓冲区。由内核决定什么时候将数据发送出去。 5.recv() 接收数据当数据送到Linux内核后数据不是立即给到应用程序而是放在接收缓冲区等应用程序什么时候调用recv()函数什么时候才由内核给到应用程序。 四、改进方向 1.做的Linux端只能在相同的IP上启动几个客户端自己玩。 后续可以做成Windows的exe买个云服务器然后发给朋友进行通信。 五、跟练视频 陈子青多人聊天室-C/C 多人聊天室开发-epoll模型的IO多路复用
http://www.w-s-a.com/news/837831/

相关文章:

  • 中国档案网站建设现状研究陕西建设厅执业资格注册中心网站
  • 网站建设的内容管理怎么用ps切片在dw里做网站
  • 建设婚恋网站用什么搭建涿州网站开发
  • 做知识内容的网站与app哈尔滨哪里有做网站的
  • 青岛企业网站建站模板百度网站建设推广
  • 做360网站中保存的图片存在哪里个人建立网站要多少钱
  • 网站安装部署无锡做网站的公司
  • 怎么将网站做成小程序安装wordpress到服务器
  • 企业网站建设的四大因素沈阳网站建设招标公司
  • wordpress仿站开发公司网站策划宣传
  • 金乡县网站开发网站开发三个流程
  • qq空间网站是多少纺织网站建设方案
  • 建设微网站项目报告网站优化难吗
  • 做网站需要自己上传产品吗企业网站系统设计
  • wordpress个人中心济南网站建设和优化
  • 网站pc端网址和手机端网址建设牡丹江 网站建设
  • 苏州新区城乡建设网站人才招聘网站开发
  • 一般网站是怎么做的威远移动网站建设
  • 赣州网站开发公司怎么才能设计好一个网站
  • 个人网站建设分几个步走培训网站开发哪个好
  • 智能网站价格河北城乡建设网站
  • 做动画在线观看网站网上花店 网站源代码
  • 做网站项目体会商业信息
  • 深圳的设计网站谷歌浏览器下载手机版官网
  • 苏州网站建设都找全网天下外贸响应式网站设计
  • 揭阳专业做网站网站迁移教材
  • 手机上怎么上传网站吗工程信息网站建设
  • 用手机建网站微信手机网站流程
  • 专注软件优化分享的网站梧州网页设计
  • 长春火车站和高铁站是一个站吗公司名称注册查询系统