【Unix网络编程】chapter3套接字编程简介
chapter3套接字编程简介
3.1 概述
- 地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换。多数现存的IPv4代码使用inet_addr和inet_ntoa这两个函数,不过这两个新函数inet_pton和inet_ntop同时适用于IPv4和IPv6.
3.2 套接字地址结构
sockaddr_
3.2.1 IPv4套接字地址结构
- IPv4套接字地址结构通常也称为"网际套接字地址结构",它以sockaddr_in命令,定义在<netinet/in.h>头文件中
- struct in_addr
- {
- in_addr_t s_addr;
- };
- struct sockaddr_in
- {
- uint8_t sin_len;
- sa_family sin_family;
- in_port_t sin_port;
- struct in_addr sin_addr;
- char sin_zero[8];
- }
3.2.2 通用套接字地址结构
- #include <sys/socket.h>
- struct sockaddr
- {
- uint8_t sa_len;
- sa_family_t sa_family;
- char sa_data[14];
- };
- eg:int bind(int, struct sockaddr *, socklen_t_);
- struct sockaddr_in serv;
- /* fill in serv */
- bind(sockfd, (struct sockaddr*)serv, sizeof(serv));
3.3 值-结果参数
- socket传递的两种方式:1:从进程到内核 2:从内核到 进程
- (1):从进程到内核传递套接字地址结构的函数有3个:bind,connnet,sendto.这些函数的一个参数是指向某个套接字地址结构的指针,另一个参数是该结构的整数大下。
- struct sockaddr_in serv;
- /* fill serv */
- connect(sockfd, (struct sockaddr*)serv, sizeof(serv));
- (2):从内核到进程传递套接字地址结构的有四个函数:accept,recvfrom,getsockname和getpeername.
- struct sockaddr_un cli;
- socklen_t len;
- len = sizeof(cli);
- getpeername(unixfd, (struct sockaddr*)&cli, &len);
3.4 字节排序函数
- 网际协议使用大端字节序来传送这些多字节整数。
- #include <netinet/in.h>
- uint16_t htons(uint16_t host16bitvalue);
- uint32_t htonl(uint32_t host32bitvalue);
- uint16_t ntohs(uint16_t net16bitvalue);
- uint32_t ntohl(uint32_t net32bitvalue);
- h: host
- n: network
- s: short
- l: long
3.5 字节操纵函数
- #include <strings.h>
- void bzero(void *dest, szie_t nbytes);
- void bcopy(const void *src, void *dest, size_t nbytes);
- int bcmp(const void *ptr, const void *ptr2, szie_t nbytes);
- #include <string.h>
- void *memset(void *dest, int c, size_t len);
- void *memcpy(void *dest, const void *src, size_t nbytes);
- int memcmp(const void *ptr1, const void *ptr2, size_t nbytes);
3.6 inet_aton, inet_addr和inet_ntoa函数
- (1)inet_aton,inet_addr和inet_ntoa在点分十进制数串("192.168.1.100")与它长度为32位的网络字节序二进制值间转换IPv4地址。
- (2)两个较新的函数inet_pton和inet_ntop对于IPv4和IPv6地址都适用
- #include <arpa/inet.h>
- int inet_aton(const char *strptr, struct in_addr *addrptr);
- in_addr_t inet_addr(const char *strptr);
- char *inet_ntoa(struct in_addr inaddr);
3.7 inet_pton和inet_ntop函数
- p:presentation(表达式)->ASCII字符串
- n:numeric(数值)->存放到套接字地址结构中的二进制值
- #include <arpa/inet.h>
- int inet_pton(int family, const char *strptr, void *addrptr);
- const char *inet_ntop(int family, const void *addrptr, char *strptr, size_tlen);
- eg:
- inet_pton(AF_INET, cp, &foo.sin_addr);
- char str[INET_ADDRSTRLEN];
- ptr = inet_ntop(AF_INET, &foo.sin_addr, str, sizeof(str));
3.8 sock_ntop和相关函数
- struct sockaddr_in addr;
- inet_ntop(AF_INET, &addr.sin_addr, str, sizeof(str));
3.9 readn, writen和readline函数
【Unix网络编程】chapter3套接字编程简介的更多相关文章
- 【Unix网络编程】chapter3 套接字编程简介
chapter3套接字编程简介3.1 概述 地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换.多数现存的IPv4代码使用inet_addr和inet_ntoa这两个函数, ...
- 初探网络编程--TCP套接字编程演示
今天看了一下<计算机网络:自顶向下方法>,也就是计算机网络的教材的应用层一章,决定实现以下后面的Java C/S应用程序的例子,用来演示TCP和UDP套接字编程. 程序流程如下: 1.一台 ...
- C项目实践--网络协议和套接字编程
1.TCP/IP协议 TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议,ICMP(Internet Control Message Proto ...
- Linux网络编程——原始套接字编程
原始套接字编程和之前的 UDP 编程差不多,无非就是创建一个套接字后,通过这个套接字接收数据或者发送数据.区别在于,原始套接字可以自行组装数据包(伪装本地 IP,本地 MAC),可以接收本机网卡上所有 ...
- unix网络编程——TCP套接字编程
TCP客户端和服务端所需的基本套接字.服务器先启动,之后的某个时刻客户端启动并试图连接到服务器.之后客户端向服务器发送请求,服务器处理请求,并给客户端一个响应.该过程一直持续下去,直到客户端关闭,给服 ...
- <unix网络编程>UDP套接字编程
典型的UDP客户/服务器程序的函数调用如下: 1.缓冲区 发送缓冲区用虚线表示,任何UDP套接字都有发送缓冲区,不过该缓冲区仅能表示写到该套接字的UDP数据报的上限.如果应用进程写一个大于套接字缓冲区 ...
- 19、网络编程 (Socket套接字编程)
网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用层.传输层.网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解. 链路层:链路层是用于定义物理传输通道,通常是对某些 ...
- 【UNIX网络编程(四)】TCP套接字编程具体分析
引言: 套接字编程事实上跟进程间通信有一定的相似性,可能也正由于此.stevens这位大神才会将套接字编程与进程间的通信都归为"网络编程",并分别写成了两本书<UNP1> ...
- TCP/IP网络编程之网络编程和套接字
网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...
随机推荐
- 关于plot画图的原理
首先是导入的: Import matplotlib.pyplot as plt 这份导入要背住,没事就是需要你进行导入的: 然后就是画图了,下面举一个例子: import numpy as np im ...
- mysql的变量信息详解
mysql的变量详解 执行show variables命令可以查看MySQL服务器的变量 变量名 默认值 说明 对应的配置文件参数 auto_increment_increment 1 自增长类型的初 ...
- Request method 'POST' not supported
总是报错,原来是form表单的锅,赶紧删了.
- 基于redis的乐观锁实践
redis真是一个分布式应用场景下的好东西,对于我们的应用设计,功劳大大的! 今天要研究的是基于redis的事务机制以及watch指令(CAS)实现乐观锁的过程. 所谓乐观锁,就是利用版本号比较机制, ...
- 企业数据总线(ESB)和注册服务管理(dubbo)的区别
企业数据总线(ESB)和注册服务管理(dubbo)的区别 转载 2015年11月04日 09:05:14 7607 企业数据总线(ESB)和注册服务管理(dubbo)的区别 2015-03-09 0 ...
- Cygwin使用2-心得
引用:http://www.jb51.net/article/6236.htm 1.在cygwin里访问Windows盘 cd /cygdrive/c cd c: 2.整合cygwin命令到Windo ...
- 17行代码解决微信小程序图片延迟加载
js 页面 Page({ data: { realScrollTop: 0,//页面滚动距离 driveHeight //屏幕高度可初始化设置 }, scroll(e){ if(e.detail.sc ...
- Dubbo的原理以及详细原理、配置
Dubbo的背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. Dubbo的应用 用于大规模 ...
- ALGO-11_蓝桥杯_算法训练_瓷砖铺放(递归)
问题描述 有一长度为N(<=N<=)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限.要将这个长度为N的地板铺满,一共有多少种不同的铺法? 例如,长度为4的地面一共有如下5 ...
- 【nginx】之proxy_pass
在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径:如果没有/,表示相对路径,把匹配的路径部分也给代理走. 假设下面四种情况分别用 h ...