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

宝安网站制作哪里好温岭企业网站建设公司

宝安网站制作哪里好,温岭企业网站建设公司,广告设计专业专科,请牢记此域名协议#xff1a;一组规则 分层模型结构#xff1a; OSI七层模型#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层TCP/IP 4层模型#xff1a;链路层/网络接口层、网络层、传输层、应用层 应用层#xff1a;http、ftp、nfs、ssh、telnet、传输层一组规则 分层模型结构 OSI七层模型物理层、数据链路层、网络层、传输层、会话层、表示层、应用层TCP/IP 4层模型链路层/网络接口层、网络层、传输层、应用层 应用层http、ftp、nfs、ssh、telnet、传输层TCP、UDP网络层IP、ICMP、IGMP链路层以太网帧协议、ARP C/S模型和B/S模型 C/S模型client-serverB/S模型browser-server 网络传输流程 数据没有封装之前是不能在网络中传递数据-》应用层-》传输层-》网络层-》链路层  --- 网络环境 以太网帧协议 ARP协议根据IP地址获取mac地址以太网帧协议根据mac地址完成数据包传输 IP协议 版本 IPv4、IPv6  -- 4位TTLtime to live 设置数据包在路由节点中的跳转上限每经过一个路由节点该值-1 减为0的路由有义务将该数据包丢弃源IP32位 -- 4字节  192.168.1.108 --- 点分十进制 IP地址string 目的IP32位--- 4字节 IP地址可以在网络环境中唯一标识一台主机 端口号可以进行网络通信的一台主机上唯一标识一个进程 IP地址端口号可以在网络环境中唯一标识一个进程 UDP协议16位源端口号 2^16 6553616位目的端口号TCP协议16位源端口号 2^16 6553616位目的端口号32序号32确认序号6个标志位16位窗口大小 2^16 65536 网络套接字socket 一个文件描述符指向一个套接字该套接字内部由内核借助两个缓冲区实现在通信过程中套接字一定是成对出现的 网络字节序 小端法pc本地存储    高位存高地址低位存低地址            int a 0x12345678大端法网络存储        高位存低地址低位存高地址          htonl -- 本地--》网络 IP 192.168.1.11 -- string -- atoi -- int -- htonl -- 网络字节序htons -- 本地--》网络 (port)ntohl -- 网络--》 本地IPntohs -- 网络--》 本地Port 注意htonl -- 本地 -- 网络IP 192.168.1.11 -- string -- atoi -- int -- htonl -- 网络字节序IP地址转换函数 inet_ptoninet_ntop 本地字节序(string IP) --- 网络字节序  // 本地字节序(string IP) --- 网络字节序 int inet_pton(int af, const char *src, void *dst);af: AF_INET,AF_INET6src:传入,IP地址(点分十进制)dst:传出转换后的 网络字节序的 IP地址返回值:成功: 1异常: 0,说明src指向的不是一个有效的ip地址失败: -1 NAMEinet_pton - convert IPv4 and IPv6 addresses from text to binary formSYNOPSIS#include arpa/inet.hint inet_pton(int af, const char *src, void *dst);DESCRIPTIONThis function converts the character string src into a network addressstructure in the af address family, then copies the network addressstructure to dst. The af argument must be either AF_INET or AF_INET6.dst is written in network byte order. 网络字节序  --- 本地字节序(string IP)  // 网络字节序 --- 本地字节序(string IP) const char *inet_ntop(int af, const void *src,char *dst, socklen_t size);af: AF_INET,AF_INET6src: 网络字节序IP地址dst: 本地字节序(string IP)size: dst的大小返回值: 成功: dst失败: NULL NAMEinet_ntop - convert IPv4 and IPv6 addresses from binary to text formSYNOPSIS#include arpa/inet.hconst char *inet_ntop(int af, const void *src,char *dst, socklen_t size);DESCRIPTIONThis function converts the network address structure src in the afaddress family into a character string. The resulting string is copiedto the buffer pointed to by dst, which must be a non-null pointer. Thecaller specifies the number of bytes available in this buffer in theargument size. sockaddr地址结构: IP Port  -- 在网络环境中唯一标识一个进程  sockaddr地址结构: IP Port -- 在网络环境中唯一标识一个进程struct sockaddr_in addr;addr.sin_family AF_INET;addr.sin_port htons(8080); #if 0int dst;inet_pton(AF_INET,192.168.1.100,(void*)dst); addr.sin_addr.s_addr dst; #else// 取出系统中有效的任意IP地址(二进制类型)addr.sin_addr.s_addr htonl(INADDR_ANY);bind(fd,(struct sockaddr*)addr,sizeof(addr)); socket函数创建一个套接字 socket函数#include sys/socket.h// 创建一个套接字int socket(int domain, int type, int protocol);domain: AF_INET,AF_INET6type: SOCK_STREAM,SOCK_DGRAMprotocol: 0返回值:成功: 新套接字所对应文件描述符失败: -1 errno NAMEsocket - create an endpoint for communicationSYNOPSIS#include sys/types.h /* See NOTES */#include sys/socket.hint socket(int domain, int type, int protocol);DESCRIPTIONsocket() creates an endpoint for communication and returns a filedescriptor that refers to that endpoint. The file descriptor returnedby a successful call will be the lowest-numbered file descriptor notcurrently open for the process. bind函数  #include arpa/inet.h int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);sockfd: socket 函数返回值struct sockaddr_in addr;addr.sin_family AF_INET;addr.sin_port htons(8080);addr.sin_addr.s_addr htonl(INADDR_ANY);addr:传入参数(struct sockaddr*)addraddrlen:sizeof(addr) 地址结构的大小返回值:成功: 0失败: -1 errno NAMEbind - bind a name to a socketSYNOPSIS#include sys/types.h /* See NOTES */#include sys/socket.hint bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);DESCRIPTIONWhen a socket is created with socket(2), it exists in a name space(address family) but has no address assigned to it. bind() assigns theaddress specified by addr to the socket referred to by the file descrip‐tor sockfd. addrlen specifies the size, in bytes, of the address struc‐ture pointed to by addr. Traditionally, this operation is called“assigning a name to a socket”.It is normally necessary to assign a local address using bind() before aSOCK_STREAM socket may receive connections (see accept(2)). listen函数设置同时与服务器建立连接的上限数(同时进行3次握手的客户端数量) // 设置同时与服务器建立连接的上限数(同时进行3次握手的客户端数量) int listen(int sockfd, int backlog);sockfd: socket 函数返回值backlog: 上限数值,最大值为128返回值:成功: 0失败: -1 errno NAMElisten - listen for connections on a socketSYNOPSIS#include sys/types.h /* See NOTES */#include sys/socket.hint listen(int sockfd, int backlog);DESCRIPTIONlisten() marks the socket referred to by sockfd as a passive socket,that is, as a socket that will be used to accept incoming connectionrequests using accept(2).The sockfd argument is a file descriptor that refers to a socket of typeSOCK_STREAM or SOCK_SEQPACKET.The backlog argument defines the maximum length to which the queue ofpending connections for sockfd may grow. If a connection requestarrives when the queue is full, the client may receive an error with anindication of ECONNREFUSED or, if the underlying protocol supportsretransmission, the request may be ignored so that a later reattempt atconnection succeeds. accept函数阻塞等待客户端建立连接成功的话返回一个与客户端成功连接的socket文件描述符 // 阻塞等待客户端建立连接成功的话返回一个与客户端成功连接的socket文件描述符 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);sockfd:socket 函数返回值addr:传出参数,成功与服务器建立连接的那个客户端的地址结构IPportsocklen_t client_addr_len sizeof(addr);addrlen传入传出 client_addr_len入addr的大小 出客户端addr实际大小返回值:成功:能与客户端进行数据通信的 socket 对应的文件描述失败:-1,errno NAMEaccept, accept4 - accept a connection on a socketSYNOPSIS#include sys/types.h /* See NOTES */#include sys/socket.hint accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);#define _GNU_SOURCE /* See feature_test_macros(7) */#include sys/socket.hint accept4(int sockfd, struct sockaddr *addr,socklen_t *addrlen, int flags);DESCRIPTIONThe accept() system call is used with connection-based socket types (SOCK_STREAM, SOCK_SEQPACKET). It extractsthe first connection request on the queue of pending connections for the listening socket, sockfd, creates a newconnected socket, and returns a new file descriptor referring to that socket. The newly created socket is not inthe listening state. The original socket sockfd is unaffected by this call. connect函数 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);sockfd: socket 函数返回值struct sockaddr_in server_addr; // 服务器地址结构server_addr.sin_family AF_INET;server_addr.sin_port htons(8080);// 跟服务器bind时设定的 port 完全一致。inet_pton(AF_INET, 服务器IP地址, server_addr.sin_addr.s_addr);addr:传入参数,服务器的地址结构addrlen:服务器的地址结构的大小返回值:成功: 0失败: -1,errno如果不使用bind绑定客户端地址结构,采用隐式绑定. NAMEconnect - initiate a connection on a socketSYNOPSIS#include sys/types.h /* See NOTES */#include sys/socket.hint connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);DESCRIPTIONThe connect() system call connects the socket referred to by the filedescriptor sockfd to the address specified by addr. The addrlen argu‐ment specifies the size of addr. The format of the address in addr isdetermined by the address space of the socket sockfd; see socket(2) forfurther details.If the socket sockfd is of type SOCK_DGRAM, then addr is the address towhich datagrams are sent by default, and the only address from whichdatagrams are received. If the socket is of type SOCK_STREAM orSOCK_SEQPACKET, this call attempts to make a connection to the socketthat is bound to the address specified by addr.Generally, connection-based protocol sockets may successfully connect()only once; connectionless protocol sockets may use connect() multipletimes to change their association. Connectionless sockets may dissolvethe association by connecting to an address with the sa_family member ofsockaddr set to AF_UNSPEC (supported on Linux since kernel 2.2). TCP 通信流程分析:  TCP 通信流程分析:Server:1.socket() 创建socket2.bind() 绑定服务器地址结构3.listen() 设置同时与服务器建立连接的上限数(监听上限)4.accept() 阻塞监听客户端连接5.read(fd) 读socket获取客户端数据6.小 -- 大写 toupper()7.write(fd) 8.close()Client:1.socket() 创建socket2.connect() 与服务器建立连接3.write() 写数据到socket4.read() 读转换后的数据5.显示读取结果6.close() server.c #include arpa/inet.h #include unistd.h #include pthread.h#include errno.h #include stdio.h #include stdlib.h #include string.h #include ctype.h #include sys/socket.h #define SERVER_PORT 9527void sysErr(const char *msg) {perror(msg);exit(1); }int main(int argc, char *argv[]) {int lfd socket(AF_INET, SOCK_STREAM, 0);if (lfd -1) sysErr(socket error);struct sockaddr_in server_addr;server_addr.sin_family AF_INET;server_addr.sin_port htons(SERVER_PORT);server_addr.sin_addr.s_addr htonl(INADDR_ANY);//给服务器socket绑定地址结构int ret bind(lfd,(struct sockaddr*)server_addr,sizeof(server_addr));if(ret -1) sysErr(bind error);// 设置监听上限 ret listen(lfd,128);if(ret -1) sysErr(listen error);struct sockaddr_in client_addr;socklen_t client_addr_len sizeof(client_addr);// 获取客户端地址结构大小// 阻塞等待客户端连接请求 int cfd accept(lfd,(struct sockaddr*)client_addr,client_addr_len);if(cfd -1) sysErr(accept error);// 根据accept传出参数获取客户端 ip 和 port char client_IP[1024];printf(client ip:%s port:%d\n,inet_ntop(AF_INET,client_addr.sin_addr.s_addr,client_IP,sizeof(client_IP)),ntohs(client_addr.sin_port));char buf[BUFSIZ];while(1) {ret read(cfd,buf,sizeof(buf));write(STDOUT_FILENO,buf,ret); // 写到屏幕查看// 转换为大写for(int i0;iret;i) {buf[i] toupper(buf[i]); // 小写 -- 大写 }write(cfd,buf,ret); // 将大写写回给客户端}close(lfd);close(cfd);return 0; } client.c #include arpa/inet.h #include sys/socket.h #include unistd.h #include errno.h #include pthread.h#include stdio.h #include stdlib.h #include string.h#define SERVER_PORT 9527void sysErr(const char* msg) {perror(msg);exit(EXIT_FAILURE);// EXIT_FAILURE 1 }int main(int argc, char const *argv[]) {int cfd socket(AF_INET, SOCK_STREAM, 0);if(cfd -1) sysErr(socket error);struct sockaddr_in server_addr; // 服务器地址结构server_addr.sin_family AF_INET;server_addr.sin_port htons(SERVER_PORT);inet_pton(AF_INET, 127.0.0.1, server_addr.sin_addr.s_addr);int ret connect(cfd, (struct sockaddr*)server_addr, sizeof(server_addr));if(ret -1) sysErr(connect error);int counter 10;char buf[BUFSIZ];while(counter--) {char *msg hello server\n;write(cfd,msg,strlen(msg));ret read(cfd,buf,sizeof(buf));write(STDOUT_FILENO,buf,ret);sleep(1);}close(cfd);return 0; } hehedalinux:~/Linux/test$ gcc server.c -o server -Wall -g hehedalinux:~/Linux/test$ ./server hehedalinux:~/Linux/test$ gcc client.c -o client -Wall -g hehedalinux:~/Linux/test$ ./client 未完待续~
http://www.hkea.cn/news/14515475/

相关文章:

  • 盐城市亭湖区城乡建设网站百度获客平台怎么收费的
  • 网站建设维护 微信哈尔滨做网站费用报价
  • 南昌手机模板建站app下载安装安卓版
  • 同城的网站建设南京最专业app开发公司
  • 南通优普网站建设制作xiu主题做的网站
  • 攻击jsp网站四川二级站seo整站优化排名
  • 德州做网站建设的公司网站的ico图标做多大
  • 上海微信网站建设公司电话通付盾 建设网站公司
  • 2016个人网站备案学做php网站
  • 免费的网站域名查询阿里云网站空间申请
  • 做网站赚钱容易吗网站添加二级域名
  • 乐清网站改版公司工业设计之父
  • 网站大全app下载莱芜新闻最新消息
  • 怎么寻找网站关键词并优化承德市网站开发
  • 个人网站备案 网站名称wordpress 用户组权限
  • 鲜花网网站开发的意义免费的视频app哪个好用
  • 网站开发方案设计网站怎么建设好看
  • 网站注册流程和费用鄂州官方网站
  • 免费做店招哪个网站好营销推广运营
  • 个人做财经类网站seo免费培训视频
  • 做网站要用框架吗亳州建设网站
  • 仿百度百科网站源码株洲网站建设方案咨询
  • 找网络公司做网站流程中国平安人寿保险公司官网
  • 免费行情网站大全搜狐网衡阳的房地产网站建设
  • 网站中文域名好吗阿里云网站怎么备案域名
  • 网站首页图片怎么更换百货网站建设
  • 网站开发属于什么大学专业wordpress评论列表美化
  • 招商网站开发怎么自己做购物网站
  • 怎么制作网站源码如何提升网站流量
  • 网站开发人才储备免费做logo设计的网站