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

哈尔滨高端网站设计六安网站优化

哈尔滨高端网站设计,六安网站优化,图书馆网站建设费用,镇江集团网站建设预备知识#xff1a; 端口号port#xff1a; 我们在正常网络通信时#xff0c;实际上是进程在互相通信。 我们所有的网络通信的行为#xff0c;本质上都是进程间通信。 对双方而言#xff0c;1.先保证数据能到达自己的机器 ip解决 2.找到指定的进程 端口号 ip地址用来…预备知识 端口号port 我们在正常网络通信时实际上是进程在互相通信。 我们所有的网络通信的行为本质上都是进程间通信。 对双方而言1.先保证数据能到达自己的机器 ip解决 2.找到指定的进程 端口号 ip地址用来标识互联网中唯一一台主机 端口号用来表示该指定的主机的进程的唯一性 所以ipport{ip,port}互联网中唯一一个进程 {ip,port}我们把它叫做套接字socket 如何理解端口号uint16_t port 16位的数字uint16_t port,用来标识主机的唯一的一个网络进程 为什么不直接用pid来表示网络中唯一一个进程 1.进程管理和网络管理进行解耦 2.port用来专门为网络通信 一个端口和一个进程进行关联 一个进程可以和多个端口号关联但是多个进程不能和一个端口号关联。 ip也可以对应多个端口号。 TCP和UDP ​ TCP协议面向链接面向字节流可靠通信 UDP协议面向数据报无连接不可靠通信 既然有了可靠通信为什么又要设计不可靠通信 中性词可靠通信要得到保证就必须做更多的工作复杂不可靠通信做更少的工作很简单丢包率也不会太高。他们之间只有不同没有好坏。 网络字节序列 在存储上我们有大端存储大权值在低地址和小端存储 也就是说不同机器的存储方式是不同的 我们在发数据在内存中是以低地址到高地址发送接收主机在内存中读取也是从低地址到高地址接收 网络规定达到网络的数据都以大端发送所有机器都知道数据是以大端发送的所以小端机器就大端转化 到小端。因为主机的大小端是不一样的。 htonlhost to net int 因为port需要通过网络递送所以得转成网络序列 socket网路编程socket是有很多类别的 1.unix socket 域间socket同一台主机 的文件路径在本主机进行通信 2.网络socketipport网络通信的文件 3.原始socket编写一些网络工具 理论上以上三种类别都要有自己的一套接口 但是设计者只想用一套接口是一套通用的地址类型 ​ ​ Server服务器 创建套接字 ​ ​ return value返回一个文件描述符 ​ ​ domain网络通信的协议家族也叫域 type套接字的类型 protocoltcp 或 udp ​ ​ struct sockaddr_in local; bzero(lock,sizeof(local)) local.sin_familyAF_INET local.sin_porthtons(_port) ​ ​ local.sin_addr.s_addrinet_addr(_ip) ​ ​完成下列功能 1.四字节ip 2.网络序列 创建了socket我们要把他绑定将它与socket关联 ​ ​ sockfdsocket返回的文件描述符 addr传入sockaddr_un 或者 sockaddr_in addrlen结构体长度 服务器永远不退出在Start中注定是一个死循环、 服务器接收 ​ ​ 返回的是实际字节len的期望收到的字节flags默认为0阻塞收消息 后两个参数为输入输出型参数给我们客户端client的信息 ip port以后发消息就发给这个客户端 服务器发送 ​ #pragma once #include iostream #include string #include cerrno #include cstring #include unistd.h#include sys/types.h #include sys/socket.h#include netinet/in.h #include arpa/inet.h#include nocopy.hpp #include Log.hpp #include Comm.hppusing namespace std; const uint16_t defaultport 8888; const int defaultsocketfd -1; const int buffsize 1024;class Udpserver : public nocopy { public:Udpserver(const uint16_t port defaultport): _port(port), _socketfd(defaultsocketfd){}void Init(){// socket_socketfd socket(AF_INET, SOCK_DGRAM, 0);if (_socketfd 0){lg.LogMessage(Fatal, socket errr, %d : %s\n, errno, strerror(errno));cout endl;exit(socketfderror);}lg.LogMessage(Info, socketfd success \n);cout endl;struct sockaddr_in local;bzero(local, sizeof(local));local.sin_family AF_INET;local.sin_port htons(_port);local.sin_addr.s_addr INADDR_ANY;// bindint n ::bind(_socketfd, (struct sockaddr *)local, sizeof(local));if (n 0){lg.LogMessage(Fatal, bind error,%d : %s\n, errno, strerror(errno));cout endl;exit(binderror);}lg.LogMessage(Info, bind success\n);cout endl;}void Start(){for (;;){struct sockaddr_in peer;socklen_t peerlen sizeof(peer);char rbuff[1024];ssize_t n recvfrom(_socketfd, rbuff, sizeof(rbuff - 1), 0, (struct sockaddr *)peer, peerlen);rbuff[n] \0;cout recv info: rbuff endl;// if (n 0)// {// lg.LogMessage(Fatal, recvfrom error,%d : %s\n, errno, strerror(errno));// }// rbuff[n]\0;ssize_t sendn sendto(_socketfd, rbuff, sizeof(buffsize), 0, (struct sockaddr *)peer, peerlen);cout sendn success: rbuff endl;if (n 0){lg.LogMessage(Fatal, sendto error,%d : %s\n, errno, strerror(errno));}}}~Udpserver() {}private:// string _ip;uint16_t _port;int _socketfd; }; ​ netstat 查看网络连接 -anup Client客户端 创建套接字 client需不需要绑定一定需要但不需要显示绑定client向服务器第一次发送信息时会自动绑定 ​ ​ 为什么 server的port众所周知是不可以随意改变的client的port是随机端口这是由于启动客户端的进程是很多 ​ ​的 127.0.0.1本地循环通常用来网络cs的测试 我们想看到客户端的信息应该如何看到 ​ ​ ​ 绑定云服务器地址失败 ​ 云服务器的公网ip是虚拟的无法直接bind不推荐更推荐本地任意ip的绑定方式 如何进行服务端的任意本地ip的绑定 IPINADDR_ANY 实现动态绑定 0.0.0.0表示任意绑定 ​ ​ #include iostream #include string #include cerrno #include cstring #include unistd.h#include sys/types.h #include sys/socket.h#include netinet/in.h #include arpa/inet.h #include Log.hpp #include Comm.hpp const int defaultsrecbuff 1024; using namespace std; void Usage(char *argv) {cout Usage: argv ServerIpServerPort endl; } int main(int argc, char *argv[]) {if (argc 3){Usage(argv[0]);cerr use client error endl;return Usage_Err;}// 创建套接字int socketfd socket(AF_INET, SOCK_DGRAM, 0);// 填充server 发送信息string serverip argv[1];uint16_t serverport stoi(argv[2]);struct sockaddr_in server;bzero(server, sizeof(server));server.sin_family AF_INET;server.sin_port htons(serverport);server.sin_addr.s_addr inet_addr(serverip.c_str());while (true){string buff;cout #Please enter:;getline(cin, buff);int n sendto(socketfd, buff.c_str(), buff.size(), 0,(const struct sockaddr *)server, sizeof(server));if (n 0){cerr send error errno strerror(errno);break;}else{// 接收信息struct sockaddr_in peer;socklen_t peerlen sizeof(peer);char recbuff[defaultsrecbuff];int m recvfrom(socketfd, recbuff, sizeof(recbuff)-1, 0,(struct sockaddr *)peer, peerlen);if (m 0){cerr rec error errno strerror(errno);break;}else{recbuff[m]0;cout #server say: recbuff endl;}}}close(socketfd); } ​​
http://www.hkea.cn/news/14363143/

相关文章:

  • 建设电影网站点击播放是乱页的个人网页制作完整教程
  • 自建网站推广方式久久建筑网账号
  • 柯林建站程序寒假网页设计培训珿
  • 燕郊 网站开发怎么做可以把网站图片保存下来吗
  • 备案不关闭网站为自己家秘方做网站
  • 学做土建资料员的网站宣传片制作公司报价
  • 网站设置保存登录密码怎么取消制作会员手机网站
  • 做ptt网站室内设计自学教材
  • 做淘宝客的网站怎么备案网站开发的方案
  • 设立网站 费用上海计算机一级网页设计
  • 大丰网站建设哪家好网站域名登录不了
  • 网站建设思路方法苏州高端网站设计制作
  • 长沙做网站需要多少钱悟空crm永久免费了
  • 网站开发公司联系电话百度指数行业排行
  • 专业制作网站是什么wordpress 下一篇文章
  • 珠海专业做网站制作平原网站建设价格
  • 怎么和其它网站做友情链接广西壮族自治区成立于哪一年
  • 门窗网站制作宣传语网站还能赚钱吗
  • 制作网站费怎么做会计科目导航网源码
  • vps 网站发布ppt的制作方法
  • 广丰区建设局网站长沙网站建设zh68
  • 专门做电商的招聘网站网泰网站建设网络推广
  • 做企业网站 长春招商平台哪个好
  • 啤酒网站建设app开发公司哪个公司好
  • 哪个网站可以做砍价新北方app下载
  • 怎么上传自己的网站手机网站 域名
  • 昆明网站建设手机版阿里企业邮箱注册申请免费
  • 网站做优化按点击收费网站模版制作教程
  • 外贸推广网站收费吗ps怎么做电商网站
  • 网站设计用什么字体搜索引擎优化seo目的