网络编程基础API
socket地址API
创建socket
监听socket
接收连接
发起连接
关闭连接
数据读写
socket地址API
主机字节和网络字节转换API:
#include <netinet/in.h>
//主机字节转换成网络字节
unsigned short int htons(unsigned short int hostshrot);
//网络字节转换成主机字节
unsigned short int ntohs(unsigned short int netshrot);
专用socket地址结构体:
//TCP/IP协议族专用socket地址结构体
struct sockaddr_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
int inet_pton(int af, const char* src,void* dst);
//将整数IP转换成字符串IP
const char* inet_ntop(int af, const void* dst,socklen_t cnt);
创建socket
创建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(int sockfd, const struct sockeaddr* addr,socketlen_t addrlen);
bind函数成功返回0,否则为-1,常见errno类型:
EACCES:被绑定的地址受到保护。
EADDRINUSE:被绑定的地址正在使用中。
监听socket
监听socket:
#include <sys/socket.h>
int listen(int sockfd,int backlog);
接收连接
接收连接API:
#include <sys/types.h>
#include <sys/socket.h>
int accept(int sockfd,struct sockaddr* addr,socklen_t* addrlen);
发起连接
发起连接API:
#include <sys/types.h>
#include <sys/socket.h>
int connect(int sockfd,const struct sockaddr* serv_addr,socklen_t addrlen);
connect函数成功返回0,否则为-1,常见errno类型:
ECONNEFUSED:目标端口不存在
ETIMEOUT:连接超时
关闭连接
关闭连接API:
#include <unistd.h>
#include <sys/socket.h>
int close(int fd);
int shutdown(int sockfd,int howto);
shutdown函数中howto参数选项
SHUT_RE:关闭读这一半
SHUT_WR:关闭写着一半
SHUT_RDWR:同时关闭读和写
数据读写
TCP数据读写API:
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int sockfd,void* buf,size_t len,int flags);
ssize_t send(int sockfd,cons void* buf,size_t len,int flags);
recv函数和send函数的flags参数选项
MSG_WAITALL:读操作读取到一定数量字节后返回
MSG_PEEK:查看读缓冲中的数据而不取出
UDP数据读写API:
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recvfrom(int sockfd,void* buf,size_t len,int flags,struct sockaddr* src_addr,socklen_t* addrlen);
ssize_t sendto(int sockfd,cons void* buf,size_t len,int flags,const struct sockaddr* dest_addr,sockelen_t addrlen);
TCP服务端/客户端开发过程
TCP连接通信流程
UDP服务端/客户端开发过程
(未完待续……持续更新……)