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

wordpress 多站点 子目录镇江发布的最新消息

wordpress 多站点 子目录,镇江发布的最新消息,海南网页设计公司,劲松做网站的公司目录 一、端口号 port 二、套接字 socket 1、原理 2、socket函数介绍 三、TCP实现网络通信 1、原理 2、TCP通信原理图 3、TCP相关函数 1#xff09;bind 绑定 2#xff09;listen 监听 3#xff09;accept 接收连接请求 4#xff09;recv 接收 5#xff09;sen…目录 一、端口号 port 二、套接字 socket 1、原理 2、socket函数介绍 三、TCP实现网络通信 1、原理 2、TCP通信原理图 3、TCP相关函数 1bind 绑定 2listen  监听 3accept 接收连接请求 4recv 接收 5send 发送 6connect 连接请求 4、TCP服务器端代码实现 5、TCP客服端代码实现 四、UDP实现网络通信 1、UDP网络通信模型 2、UDP相关函数 recvfrom sendto 3、UDP服务器端代码实现 4、UDP客服端端代码实现 五、TCP和UDP基础通信模型注意事项 一、端口号 port 1、为了区分同一主机上的多个进程使用端口号来进行处理 2、端口号是一个2字节的无符号整数存储取值范围【0,65535】 3、网络通信中两个“地址”主机的地址——IP进程的地址——端口号 4、特殊的端口号0-1023      由系统默认应用程序占用编程不可使用 TCP 21端口:FTP文件传输服务 TCP 23端口:TELNET终端仿真服务 TCP 25端口:SMTP简单邮件传输服务 TCP 110端口:POP3邮局协议版本3 TCP 80端口:HTTP超文本传输服务 TCP 443端口:HTTPS加密超文本传输服务 UDP 53端口:DNS域名解析服务 UDP 69端口:TFTP文件传输服务 特殊的端口函数存储在linux中的 /etc/services文件中 5、编程可使用的1024-49151    编程可使用的端口号 6、临时端口号49152-65535 客服端运行时动态选择的编程时若未指定端口号会分配临时端口号 二、套接字 socket 相关帮助指令     man 2 socket     man 7 socket 1、原理 2、socket函数介绍 #include sys/types.h /* See NOTES */#include sys/socket.hint socket(int domain, int type, int protocol);功能为通信创建一个端点并返回该端点的文件描述符参数1通信域Name Purpose Man pageAF_UNIX, AF_LOCAL 本地通信同一主机之间进程通信 详情请看man 7 unixAF_INET IPv4 提供的网络通信 详情请看man 7 ipAF_INET6 IPv6 提供的网络通信 详情请看man 7 ipv6参数2指定通信语义可以由多个宏值使用位或连接SOCK_STREAM表示提供TCP协议的传输方式SOCK_DGRAM表示提供UDP协议的传输方式SOCK_NONBLOCK套接字设置非阻塞属性参数3如果参数2中仅仅指定一个协议那么参数3可以填0如果指定多个则参数3需要指定特定的协议TCP协议名称IPPROTO_TCPUDP协议名称IPPROTO_UDP返回值成功返回创建的套接字文件描述符失败返回 -1并置位错误码 三、TCP实现网络通信 1、原理 服务器端 1创建套接字1 2给套接字1绑定服务器端端口号、ip地址 3将套接字1的功能改为监听套接字内部被改造原本的收发缓冲区改为已连接、未连接队列用于检测是否客服端连接三次握手就发生在这一步 4阻塞等待连接连接成功创建套接字2用于消息的收发 5消息的发送与接收 6关闭通信可以由服务器端、客服端其中之一执行 客服端 1创建由于通信的套接字 2绑定客服端端口号、ip地址 3连接服务器端连接成功进入未连接队列马上从未连接队列向已连接队列转换该过程非常迅速但同时申请连接的数量过多超过未连接队列大小仍会阻塞 4消息的发送与接收 5关闭通信可以由服务器端、客服端其中之一执行 2、TCP通信原理图 3、TCP相关函数 1bind 绑定 #include sys/types.h /* See NOTES */#include sys/socket.hint bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);功能位套接字分配名称参数1通过socket函数创建出来的套接字文件描述符参数2通用地址信息结构体需要根据具体使用的地址族而定 struct sockaddr仅仅只是为了类型的强制转换防止出现警告跨主机间通信man 7 ipstruct sockaddr_in {sa_family_t sin_family; /* 表示通信域 */in_port_t sin_port; /* 端口号的网络字节序 */struct in_addr sin_addr; /* ip地址 */};/* Internet address. */struct in_addr {uint32_t s_addr; /* IP地址的网络字节序 */};同一主机间通信man 7 uninxstruct sockaddr_un {sa_family_t sun_family; /* 表示通信域AF_UNIX */char sun_path[108]; /* 套接字文件的地址 */};参数3参数2的大小返回值成功返回0失败返回-1并置位错误码注意关于bind的两个错误1、 Cannot assign requested address表示IP地址填写错误检查IP是否有问题2、Address already in use表示地址信息正在占用可以调用函数快速重用也可以等一会 2listen  监听 #include sys/types.h /* See NOTES */#include sys/socket.hint listen(int sockfd, int backlog);功能将套接字设置成被动监听状态已接受客户端的连接请求参数1套接字文件描述符参数2容纳连接的队列的最大长度一般填128返回值成功返回0失败返回-1并置为错误码 3accept 接收连接请求 #include sys/types.h /* See NOTES */#include sys/socket.hint accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);功能用于阻塞接收客户端连接请求参数1服务器套接字文件描述符参数2用于接收对端地址信息结构体的指针参数3接收对端地址信息的长度返回值成功返回一个新的用于通信的套接字文件描述符失败返回-1并置位错误码4recv 接收 #include sys/types.h#include sys/socket.hssize_t recv(int sockfd, void *buf, size_t len, int flags);功能从套接字中读取数据到buf中参数1用于通信的套接字文件描述符参数2接收数据后的容器地址参数3接收的数据的大小参数4是否阻塞接收0表示阻塞接收消息MSG_DONTWAIT表示非阻塞接收数据返回值0:表示成功读取的字符个数0表示通信对端已经下线-1:表示出错置位错误码 5send 发送 #include sys/types.h#include sys/socket.hssize_t send(int sockfd, const void *buf, size_t len, int flags);功能向通信套接字文件描述符中写入数据参数1通信的套接字文件描述符参数2要发送数据的起始地址参数3要发送数据的大小参数4是否阻塞接收0表示阻塞接收消息MSG_DONTWAIT表示非阻塞接收数据返回值成功返回发送字符的个数失败返回-1并置位错误码 6connect 连接请求 #include sys/types.h /* See NOTES */#include sys/socket.hint connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);功能将套接字文件描述符连接到addr指向的地址空间中参数1客户端套接字文件描述符参数2对端地址信息结构体参数3参数2的大小返回值成功返回0失败返回-1并置位错误码4、TCP服务器端代码实现 #include myhead.h #define SER_PORT 6666 #define SER_IP 192.168.232.129 int main(int argc, char const *argv[]) {// 1、创建套接字int sfd socket(AF_INET, SOCK_STREAM, 0);// 参数1ipv4的网络通信// 参数2TCP通信方式// 参数3默认使用一个协议if (sfd -1){perror(socket error);return -1;}printf(socket success, sfd %d\n, sfd); // 3// 2、为套接字绑定ip地址和端口号// 2.1 填充地址信息结构体struct sockaddr_in sin;sin.sin_family AF_INET; // 通信域sin.sin_port htons(SER_PORT); // 端口号sin.sin_addr.s_addr inet_addr(SER_IP); // ip地址// 2.2 绑定if (bind(sfd, (struct sockaddr *)sin, sizeof(sin)) -1){perror(bind error);return -1;}printf(bind success\n);// 3、将套接字设置为被动监听状态,用于接收if (listen(sfd, 128) -1){perror(listen error);return -1;}printf(listen success\n);// 4、阻塞等待客户端的连接请求// 4.1 定义n变量用于e接收客服端的信息struct sockaddr_in cin;socklen_t addrlen sizeof(cin);// 4.2 接收连接int newsfd accept(sfd, (struct sockaddr *)cin, addrlen);if (newsfd -1){perror(accept error);return -1;}printf([%s:%d]:accept on\n, inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));//5、数据收发char buf[128] ;while (1){// 从客户端套接字中接收数据int res recv(newsfd, buf, sizeof(buf),0);if (res -1){perror(read error);return -1;}else if (res 0){printf(客户端已下线\n);close(newsfd); // 关闭客户端套接字break;}// 接收数据printf([%s:%d]:%s\n, inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), buf);// 对接收到的数据进行处理strcat(buf, :D);// 将消息返回到客户端if (send(newsfd, buf, strlen(buf),0) -1){perror(发送失败\n);return -1;}printf(发送成功\n);bzero(buf,sizeof(buf));//清空容器}return 0; }5、TCP客服端代码实现 #include myhead.h #define SER_PORT 6666 // 与服务器保持一致 #define SER_IP 192.168.232.129 // 服务器ip地址 #define CLI_PORT 8888 // 客服端端口号 #define CLI_IP 192.168.232.129 // 客服端ip地址 int main(int argc, char const *argv[]) {//1、 创建用于通信的套接字文件描述符int cfd socket(AF_INET, SOCK_STREAM, 0);if (cfd -1){perror(socket error);return -1;}printf(cfd %d\n, cfd);//2、 绑定IP地址和端口号struct sockaddr_in cin;cin.sin_family AF_INET; // 通信域cin.sin_port htons(CLI_PORT); // 端口号cin.sin_addr.s_addr inet_addr(CLI_IP); // ip地址//2.2、 绑定if (bind(cfd, (struct sockaddr *)cin, sizeof(cin)) -1){perror(bind error);return -1;}printf(bind success\n);//3、 连接服务器//3.1、 填充服务器地址信息结构体struct sockaddr_in sin;sin.sin_family AF_INET; //通信域sin.sin_port htons(SER_PORT);sin.sin_addr.s_addr inet_addr(SER_IP);//3.2、连接服务器if(connect(cfd,(struct sockaddr*)sin,sizeof(sin)) -1){perror(connect error);return -1;}printf(连接服务器成功\n);//4、数据收发char buf[128] ;while (1){printf(输入);fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] 0;//将数据发送到服务器send(cfd,buf,strlen(buf),0);printf(发送结束\n);//接收服务器发送的数据bzero(buf,sizeof(buf));//清空容器recv(cfd,buf,sizeof(buf),0);printf(收到服务器信息%s\n,buf);}//5、关闭套接字close(cfd);return 0; }四、UDP实现网络通信 1、UDP网络通信模型 2、UDP相关函数 recvfrom sendto ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);//功能从套接字文件描述符中读取数据并将对端地址信息结构体接收参数1套接字文件描述符参数2要接收数据的起始地址参数3要接收的数据大小参数4是否阻塞0表示阻塞MSG_NOWAIT表示非阻塞参数5接收对端地址信息结构体参数6参数5的大小返回值成功返回读取的字节的大小失败返回-1并置位错误码ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);//功能向套接字文件描述符中读取数据写给指定的对端接收参数1套接字文件描述符参数2要发送数据的起始地址参数3要发送的数据大小参数4是否阻塞0表示阻塞MSG_NOWAIT表示非阻塞参数5接收对端地址信息结构体参数6参数5的大小返回值成功返回发送的字节的大小失败返回-1并置位错误码 3、UDP服务器端代码实现 #include myhead.h #define SER_PORT 9999 // 服务器端口号 #define SER_IP 192.168.232.129 // 服务器ip地址 int main(int argc, char const *argv[]) {// 1、创建用于通信的套接字i文件描述符int sfd socket(AF_INET, SOCK_DGRAM, 0);if (sfd -1){perror(scoket error);return -1;}printf(sfd %d\n, sfd); // 3// 2、绑定ip地址和端口号// 2.1 填充地址信息结构体struct sockaddr_in sin;sin.sin_family AF_INET; // 通信域sin.sin_port htons(SER_PORT); // 端口号sin.sin_addr.s_addr inet_addr(SER_IP); // ip地址// 2.2、 绑定if (bind(sfd, (struct sockaddr *)sin, sizeof(sin)) -1){perror(bind error);return -1;}printf(bind success\n);// 3、数据收发char buf[128] ;struct sockaddr_in cin; // 接收对端地址信息socklen_t addrlen sizeof(cin); // 接收地址长度while (1){// 清空容器bzero(buf, sizeof(buf));// 从套接字中读取数据recvfrom(sfd, buf, sizeof(buf), 0,(struct sockaddr*)cin,addrlen);printf(收到信息%s\n, buf);// 处理收到的信息strcat(buf, :();if (sendto(sfd, buf, sizeof(buf), 0,(struct sockaddr*)cin,sizeof(cin)) -1){perror(send error);return -1;}printf(发送成功\n);}// 4、关闭文件描述符close(sfd);return 0; }4、UDP客服端端代码实现 #include myhead.h #define SER_PORT 9999 // 与服务器保持一致 #define SER_IP 192.168.232.129 // 服务器ip地址 #define CLI_PORT 5555 // 客服端端口号 #define CLI_IP 192.168.232.129 // 客服端ip地址 int main(int argc, char const *argv[]) {// 1、 创建用于通信的套接字文件描述符int cfd socket(AF_INET, SOCK_DGRAM, 0);if (cfd -1){perror(socket error);return -1;}printf(cfd %d\n, cfd);// 2、 绑定IP地址和端口号struct sockaddr_in cin;cin.sin_family AF_INET; // 通信域cin.sin_port htons(CLI_PORT); // 端口号cin.sin_addr.s_addr inet_addr(CLI_IP); // ip地址// 2.2、 绑定if (bind(cfd, (struct sockaddr *)cin, sizeof(cin)) -1){perror(bind error);return -1;}printf(bind success\n);// 3、数据收发char buf[128] ;// 3.1 填充服务器地址信息结构体struct sockaddr_in sin; // 接收对端地址信息sin.sin_family AF_INET; // 服务器的通信域sin.sin_port htons(SER_PORT); // 服务器的端口号sin.sin_addr.s_addr inet_addr(SER_IP); // 服务器的ip地址while (1){printf(输入);fgets(buf, sizeof(buf), stdin);buf[strlen(buf) - 1] 0;sendto(cfd, buf, strlen(buf), 0, (struct sockaddr *)sin, sizeof(sin));printf(发送成功\n);bzero(buf, sizeof(buf));recvfrom(cfd, buf, sizeof(buf), 0, NULL, NULL);printf(收到服务器信息%s\n, buf);}// 4、关闭套接字close(cfd);return 0; }五、TCP和UDP基础通信模型注意事项 1、无论时TCP还是UDP通信中服务器必须绑定ip地址和端口号以便于让客服端找到该服务器。对于客服端而言ip地址和端口号可以不绑定若不绑定端口号由系统动态分配49152-65535 2、对于TCP通信而言可以使用recv和send进行通信也可以使用read、write进行通信还可以使用sendto和recvfrom进行通信 3、对于UDP通信而言如果当前端只是用于接收数据不发送数据可以使用recvfrom、recv、read进行接收;如果当前端接收数据后还要发送数据给对端则需要使用recvfrom进行接收数据以便接收对端地址信息结构体 4、UDP通信中服务器端可以使用connect函数与指定的客服端建立一个唯一的通道在解除这种连接前其他客服端与服务器端间不能通信。可通过将与服务器端建立连接的那个客服端的地址消息结构体中的sin.family设置未 AF_UNSPEC, 后再次使用connect函数断开连接 UDP中通信使用connect连接的好处 1提高信息传输效率、完整度 例如:A和B同时向服务器发送消息但是A发送的消息较大需要较长的时间发送过程中可能会出现时间片用完服务器转而接收B的消息的情况这会导致消息混乱。这时就可以先单独跟A建立连接等所有数据传输结束后,再跟B通信 2传输性能高 一般的UDP通信:获取对端地址信息 --将信息加载到内核 --数据收发---获取对端地址信息 --将信息加载到内核 ---数据收发 ---获取对端地址信息 --将信息加载到内核 --数据收发 --...... 会经历多次用户空间到内核空间的转换该过程对于cpu而言是一个漫长的过程 UDP建立连接后:获取对端地址信息 -将信息加载到内核 -数据收发 -数据收发 数据收发 数据收发完成进行其他对端的信息处理..... 会有效的减少用户空间到内核空间的转换次数
http://www.hkea.cn/news/14493669/

相关文章:

  • 营销型网站有哪些app标书制作难吗
  • 服装网站建设目的作用是什么天津网站建设哪家设计好
  • 空间信息网站官方网站下载派的app
  • 自己如何做家政网站网站开发招标公告
  • 西安建设网站制作南京 网站建设有限公司
  • 怎么做网站优化排名到前面安徽网站建设整体策划方案
  • 怎么做根优酷差不多的网站如何建设学校的微网站
  • 济南网络优化网站网站如何做网站解析
  • 郴州卖房网站邢台市建设局培训中心网站
  • 山东中佛龙建设有限公司网站手机网站有什么不同
  • 桐庐网站制作网站型营销
  • 网站建设设计师的工作内容腾讯广告投放平台
  • 网站做动态图片动物摄影网站
  • 河北省建设注册中心网站首页做网站租服务器吗
  • 男装网站的网站建设背景网站赌场怎么做代理
  • 企业网站推广的重要性百度网盘资源搜索入口
  • 只做移动端的网站网站qq未启用
  • 网站外链建设需要逐步进行适可优化即可地域名网址查询
  • 建设部执业资格注册中心网站开发公司交房归物业公司交给物业公司
  • 动漫做3d游戏下载网站有哪些wordpress首页名称
  • 深圳深圳网站开发百度seo公司哪家好一点
  • 成都网站建设著名公司网站备案没座机
  • 苏宁网站建设和推广策略市场策划
  • 做福利网站违法吗免费建设网站平台
  • 中国建设门户网站纪念币超级网站建设
  • 没有网站也可以做cpa怎么查询网站备案接入商
  • 网站制作文案dede网站301怎么做
  • 临沂网站建设步骤网站绩效营销
  • 外贸网站产品分析易动力建设网站怎么样
  • ps课堂网站wordpress 商城 支付宝