Linux下的网络编程API基础


网络编程基础API

socket 地址 API
创建 socket
监听 socket
接收连接
发起连接
关闭连接
数据读写


网络编程基础API— socket地址API

主机字节和网络字节转换API

#include <netinet/in.h>

//主机字节转换成网络字节

unsigned short inthtons(unsigned short inthostshrot);    

//网络字节转换成主机字节

unsigned short intntohs(unsigned short intnetshrot);

专用socket地址结构体:

//TCP/IP协议族专用socket地址结构体

structsockaddr_in

{

  sa_family_t  sin_family; //地址族:AF_INET

  u_int16_t  sin_port; //端口号, 要用网络字节序表示

  struct  in_addr  sin_addr;  //IPv4地址结构体,是u_int32_t  s_addr;

};

IP转换函数:

#include <arpa/inet.h>

//将字符串IP转换为整数IP

intinet_pton(intaf, const char* src,void* dst);    

//将整数IP转换成字符串IP

const char* inet_ntop(intaf, const void* dst,socklen_tcnt);    


创建socket

#include <sys/types>

#incliude <sys/socket.h>

/*

  domain:底层协议族类型

  type: 指定服务类型

  protocol :具体的协议

*/

int socket(int domain, int type, int protocol);


命令socket

#include <sys/types>

#include <sys/socket.h>

// 服务器绑定网络地址

int bind(intsockfd, const structsockeaddr* addr,socketlen_taddrlen);

bind函数成功返回0,否则为-1,常见errno类型:

EACCES: 被绑定的地址受到保护。
EADDRINUSE: 被绑定的地址正在使用中。

监听socket

#include <sys/socket.h>

int listen(intsockfd,int backlog);    


接收连接API

#include <sys/types.h>

#include <sys/socket.h>

int accept(intsockfd,structsockaddr* addr,socklen_t* addrlen);


发起连接API

#include <sys/types.h>

#include <sys/socket.h>

int connect(intsockfd,conststructsockaddr* serv_addr,socklen_taddrlen);

connect函数成功返回0,否则为-1,常见errno类型:

ECONNEFUSED: 目标端口不存在
ETIMEOUT: 连接超时

关闭连接API

#include <unistd.h>

#include <sys/socket.h>

int close(intfd);

int shutdown(intsockfd,inthowto);


shutdown函数中howto参数选项

SHUT_RE: 关闭读这一半
SHUT_WR: 关闭写着一半
SHUT_RDWR: 同时关闭读和写


TCP数据读写API

#include <sys/types.h>

#include <sys/socket.h>

ssize_trecv(intsockfd,void* buf,size_tlen,int flags);

ssize_t send(intsockfd,cons void* buf,size_tlen,int flags);

recv函数和send函数的flags参数选项

MSG_WAITALL: 读操作读取到一定数量字节后返回
MSG_PEEK: 查看读缓冲中的数据而不取出

UDP数据读写API

#include <sys/types.h>

#include <sys/socket.h>

ssize_trecvfrom(intsockfd,void* buf,size_tlen,intflags,structsockaddr* src_addr,socklen_t* addrlen);

ssize_tsendto(intsockfd,cons void* buf,size_tlen,intflags,conststructsockaddr* dest_addr,sockelen_taddrlen);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值