1创建socket套接字
int socket(int domain, int type, int protocol);
domain:选择你要使用的网络层协议 一般是ipv4,也就是AF_INET
type:选择你要使用的应用层协议,这里我们选择udp,也就是SOCK_DGRAM
成功返回文件描述符,失败返回-1
注意:源代码放在最后面,log是自己写的日志类,这里使用了类进行封装
//1.创建 Udp Stocket套接字
_sockfd = socket(AF_INET,SOCK_DGRAM,0);
if(_sockfd < 0)
{
LOG(FATAL,"socket error,%s ,%d \n",strerror(errno),errno);
exit(SOCKET_ERROR);
}
LOG(INFO,"socket create success,sockfd: %d\n",_sockfd);
2填充sockaddr_in结构体
uint16_t htons(uint16_t hostshort);
将端口号从主机序列转成网络序列
in_addr_t inet_addr(const char *cp);
将ip从主机序列转成网络序列 + 字符串风格ip转成点分十进制ip
uint16_t ntohs(uint16_t netshort);
将端口号从网络序列转成主机序列
char *inet_ntoa(struct in_addr in);
将ip从网络序列转成主机序列 + 点分十进制ip转成字符串风格ip
网络通信:struct sockaddr_in
本地通信:sockaddr_un
16位地址类型表明了他们是网络通信还是本地通信
16位地址类型:sin_family
16位端口号:sin_port
32位ip地址:sin_addr.s_addr
//2填充stockaddr_in结构
struct sockaddr_in local;
local.sin_family = AF_INET;
//填充端口号,主机序列转网络序列
local.sin_port = htons(_port);
//填充ip,主机序列转网络序列 + 字符串风格ip转成点分十进制ip
local.sin_addr.s_addr = inet_addr(_ip.c_str());
3将ip地址和端口号与stockfd绑定
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
sockfd:要绑定的socket套接字的文件描述符
struc