Socket编程(TCP/UDP) <sys/socket.h>
如有问题请多多指教,
首先我们需要知道tcp和udp的协议的特点。
1.Tcp模式(由客户端链接服务器)
服务器端 客户端
socket() 创建套接字 socket()创建套接字
bind() 命名套接字(绑定地址)
listen()创建监听队列
accept()接收连接(阻塞) connect()发起连接
recv() 接收数据 send()发送数据
Send()发送数据 recv()发送数据
Close()关闭连接 close()关闭链接
对于每一个主机我们都有大端和小端的区别,为啥保证可以正常通讯,我们网络字节序均使用了大端的方式。现在pc端大多数使用小端模式,因此我们的主机字节序使用小端。
<netinet/in.h>
unsigned long int htonl(unsigned long int hostlong)
unsigned short int htons(unsigned short int hostlong)
unsigned long int ntonl(unsigned long int netlong)
unsigned short int ntons (unsigned short int netshort)
例如:
htonl 表示 host to network long 即将长整型主机字节序的数据转换成网络字节序。
ip地址转换函数
通常,我们习惯用可读性好的字符串来表示ip地址,比如用点分十进制字符串表示IPv4地址,以及用十六进制字符串表示IPv6地址。但编程中我们需要将它们转化成整数方能使用。
用点分十进制字符串表示的IPv4地址和网络字节序整数表示的IPv4地址之间的转换:
#include<arpa/inet.h>
int_addr_t inet_addr(const char * strptr);
int inet_aton(const char * cp,struct in_addr* inp);
char * inet_ntoa(struct in_addr in);
inet_addr 将用点分十进制字符串表示的IPv4地址转换成网络字节序整数表示的IPv4,失败时返回 INADDR_NONE;
inet aton 函数和上面的一样,但是将转化的字符串存放在 inp中,成功返回1,失败返回0.
inet_ntoa 函数将用网络字节序整数表示ipv4 转化成 点分十进制字符串表示的IPv4地址但是要注意的是,该函数中,有静态变量,因此inet_nota是不可重入的。
函数介绍:
int socket(int domain, int type, int protocol);
失败返回 -1,成功返回监听套接字
domain 设置套接字协议族, AF_UNIX UNIX本地域协议簇, AF_INET TCP/IPV4协议簇 AF_INET6 TCP/IPV6协议簇
type 设置套接字服务类型 SOCK_STREAM (流