linux环境编程网络_第1页
linux环境编程网络_第2页
linux环境编程网络_第3页
linux环境编程网络_第4页
linux环境编程网络_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论