




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2010年8月12日在主机字节顺序与网络字节顺序间转换#include
<netinet/in.h>主机字节序网络字节序uint16_t
htons(uint16_t
val);host->to->net->shortuint32_t
htonl(uint32_t
val);
host->to->net->long网络字节序主机字节序uint16_t
ntohs(uint16_t
val);
net->to->host->shortuint32_t
ntohl(uint32_t
val);23#include<arpa/inet.h>将字符串的IP地址转换成网络字节序的地址in_addr_t
inet_addr(const
char
*strIP);若成功,返回32位网络字节序的地址,若出错,则返回NADDR_NONE不建议使用,因为55这个地址无法被转换int
inet_aton(const
char
*strIP,
struct
in_addr
*addr);若成功,返回非0,若地址字符串有错,返回0,仅转换IPV4地址int
inet_pton(int
family,const
char
*strptr,
void
*addrptr);返回:1成功,0-输入不是有效的表达式,-1出错
Family:AF_INET6,AF_INET42.将网络字节序的地址转换成字符串的IP地址char
*inet_ntoa(struct
in_addrinaddr);返回:指向字符串IP的指针。例:char*ip=inet_ntoa(addr.sin_addr);const
char
*inet_ntop(int
family,
const
void
*addr,
char*strIP,
size_t
len);参数:family–地址族,值为AF_INET或AF_INET6addr–需要转换的地址返回:指向字符串IP的指针,失败返回NULL;例:char
ip[64];inet_ntop(AF_INET, &addr.sin_addr,
ip,
64);1.地址结构通用套接字地址:struct
sockaddr{sa_family_t
sa_family;char
sa_data[14];};5struct
sockaddr_in{sa_family_t
sin_family;in_port_t
sin_port;struct
in_addr
sin_addr;};typedef
uint32_t
in_addr_t;struct
in_addr{in_addr_t
s_addr;};671.socket()int
socket(int
family,
int
type,
int
protocol);功能描述:创建套接字文件描述字。参数:family–协议族AF_INET
--------IPV4协议(PF_INET)AF_INET6--------IPV6协议AF_LOCAL--------UNIX域协议(PF_LOCAL)AF_ROUTE-------
路由套接口type–套接字类型SOCK_STREAM--------字节流套接口(TCP及AC_LOCAL时)SOCK_DGRAM---------数据报套接口(UDP及AC_LOCAL时)protocol–取0返回:成功为非负描述字,失败返回-1例子:int
fd=socket(AF_INET,SOCK_STREAM,0);82.
connect()int
connect(int
sockfd,
const
struct
sockaddr
*addr,
socklen_t
len);功能描述:建立从客户端到服务器的连接返回:成功返回0,失败返回-1例子:int
sock;struct
sockaddr_in
addr;memset(&addr,
0,sizeof(addr));sock
=
socket(AF_INET,
SOCK_STREAM,
0);addr.sin_family
=
AF_INET;//转换IP和端口到网络字节序
addr.sin_port=htons(port);//addr.sin_addr.s_addr
=
inet_addr(“”);inet_pton(AF_INET,
“”,
&addr.sin_addr);if(connect(sock,(struct
sockaddr*)&addr,
sizeof(addr))
!=
0)
{printf("Connect
to
%s:%dfailed\n",
address,
port);return
-1;}9recv()int
recv(int
sock,
void
*buf,
int
size,
int
flag);
功能描述:从sock套接字接收数据。服务器使用其接收客户请求,客户使用它接受服务器的应答。如果没有数据,将阻塞。也可以使用recv接收面向连接的
UDP的报文。
参数sockfd:套接字描述符buf:指向内存块的指针size:内存块大小,以字节为单位flags:一般为0
返回:>0
接收到的字节个数-1
接收失败0
对方连接已关闭10send()ssize_t
send(int
s,
const
void
*buf,
size_t
len,int
flags);功能
在TCP连接上发送数据,返回成功传送数据的长度,出错时返回-1。
send会将外发数据复制到OS内核中,也可以使用send发送面向连接的UDP报文。参数说明:sockfd:套接字描述符data:指向要发送数据的指针data_len:数据长度flags:一直为011close()int
close(int
s);功能
关闭套接字。参数说明:
s–要关闭的套接字。12getsockopt()int
getsockopt(int
s,
int
level,int
optname,void
*optval,
socklen_t*optlen);功能
获取套接字选项。参数说明:
s–套接字
level
–
Optname
–
optval
–
optlen
-13setsockoptint
setsockopt(int
s,
int
level,
int
optname,const
void
*optval,
socklen_t
optlen);功能
设置套接字选项。参数说明:
s–套接字
level
–
Optname
–
optval
–
optlen
-14域名解析函数:gethostbyname()#include
<netdb.h>extern
int
h_errno;struct
hostent
*gethostbyname(const
char
*name);int
gethostbyname_r(const
char
*name,struct
hostent
*ret,
char
*buf,
size_t
buflen,struct
hostent
**result,
int
*h_errnop);struct
hostent
{/*
official
name
of
host
*//*
alias
list
*//*
host
address
type
*//*
length
of
address
*/char
*h_name;char
**h_aliases;int
h_addrtype;int
h_length;char**h_addr_list; /*
list
of
addresses
*/}15Listenint
listen(int
sock,
int
backlog);功能
开始侦听。参数说明:
sock–绑定好端口的套接字
backlog–连接缓冲中最大存放的待accept的套接字个数16int
accept(int
servSock,(struct
sockaddr
*)addr,
socklen_t
*len);功能
接收一个客户端连接参数说明:
s–套接字
addr–存放客户端的地址信息,作为返回值返回
len -addr的长度,也是作为返回值返回,但是传进去之前需要先对它进行赋值
返回值:成功返回套接字,这个套接字对应客户端的连接,失败返回-117shutdown(int
,
int
how)SHUT_RD一般在close()之前调用18获取对方的地址int
getpeername(int
sock,
struct
sockaddr
*name,socklen_t
*namelen);获取本地的地址int
getsockname(int
sock,
struct
sockaddr
*name,socklen_t
*namelen);19IO复用:select()intselect(intmaxfd,fd_set*readfds,
fd_set*writefds,fd_set*exceptfds,structtimeval
*timeout);功能
允许程序监听多个文件描述符,等待其中一个或多个文件描述符满足IO的条件,比如:可读、可写和出现异常,或者直到等到一个超时时间为止。参数说明:
maxfd–是监听的文件描述符中最大的那个描述符加1
readfds–要监听的可读套接字集合
timeout–等待的时间,它会被修改
返回:返回满足IO条件的文件描述符的个数,超时返回0,其它返回失败20把一个文件描述符从集合中删去void
FD_CLR(int
fd,
fd_set
*set);检测一个文件描述符是否在集合中int FD_ISSET(int
fd,
fd_set
*set);添加一个文件描述符到文件描述符集中
voidFD_SET(intfd,fd_set*set);把文件描述符集清空void
FD_ZERO(fd_set
*set);21IO复用:poll()#include
<poll.h>int
poll(struct
pollfd
*fds,
nfds_t
nfds,
int
timeout);struct
pollfd
{int
fd; /*
file
descriptor
*/short
events;short
revents;/*
requested
events
*//*
returned
events
*/};典型的UDP客户端-服务器程序函数调用2223它们和read和write相似,只是多了3个附加参数ssize_t
recvfrom(int
socket,
void
*restrict
buffer,
size_t
length,
intflags,
struct
sockaddr
*restrict
address,
socklen_t
*restrictaddress_len);功能:发送数据报,返回实际发送的数据长度,出错时返回-1参数说明:sockfd:套接字描述符data:指向要发送数据的指针data_len:数据长度flags:通常设为0address:远端的地址,IP地址和端口号address_len:远端地址长度
socklen_t
len=sizeof(address);举例:recvfrom(sockfd,buf,8192,0,(struct
sockaddr*)&address,
&len);242.
ssize_t
sendto(int
sockfd,
const
void
*data,
intdata_len,unsigned
int
flags,
struct
sockaddr
*remaddr,intremaddr_len);功能:从UDP接收数据,返回实际接收的字节数,失败时返回-1参数说明:sockfd:套接字描述符buf:指向内存块的指针buf_len:内存块大小,以字节为单位flags:一般为0remaddr:远端地址:IP地址和端口号remaddr_len:地址长度25连接的UDP通信客户使用connect调用指明远程端点地址使用SOCK_DGRAM类型的套接字不发起任何分组交换,不检查远程端点合法性只是在套接字的数据结构记录远程端点的信息不用重复指明远端地址收发报文只和一个服务器交互比较方便非连接的UDP通信在每次发送报文的时候指明远程目的地使用灵活,便于同不同的服务器通信26对于非连接的UDP套接字sendto:
发送报文,含有地址信息recvfrom:接收一个含有源地址的数据报对于连接的UDP套接字使用send或write发送报文使用recv或read接收报文每次send或write发送一个完整的报文每次recv或read接受一个完整的报文,需要足够大的缓存不需要重复使用recv获得单个报文27从UDP给特定套接口排队的UDP数据报数目受限于套接口缓冲区的大小,我们可以用SO_RCVBUF
套接口选项来修改此值代码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 漯河职业技术学院《MG动画设计》2023-2024学年第二学期期末试卷
- 山东劳动职业技术学院《钢琴合奏》2023-2024学年第二学期期末试卷
- 航空航天材料科技知识要点集萃
- 《细胞分裂方式及特点:高二生物教案》
- 我们的运动会集体记忆作文(14篇)
- 杜甫诗三首:望岳春望石壕吏教案
- 江苏大学《怀素草书专题》2023-2024学年第二学期期末试卷
- 产品动态演示视频拍摄行业深度调研及发展项目商业计划书
- 乡村香薰蜡烛店行业跨境出海项目商业计划书
- 吉林农业科技学院《政治经济学原理》2023-2024学年第二学期期末试卷
- 2025年安徽省省情试题及答案
- 羊肚菌种植项目可行性研究报告
- 2025年消控室考核试题及答案
- 卫健系统2025年上半年安全生产工作总结
- 第一章体育与健康基础知识 第一节 科学发展体能 课件 2024-2025学年人教版初中体育与健康八年级全一册
- 消除艾滋病、梅毒和乙肝母婴传播项目工作制度及流程(模板)
- 高三数学复习策略
- 2024年昆明房地产市场总结与预判正式版
- 2025年度老旧小区改造工程施工合同交底范本
- 门诊检查、检验项目规范制度
- 2025年视频剪辑软件市场调查报告
评论
0/150
提交评论