linux网络编程基础api
-
socket
地址api:ip地址和端口对,成为soccket
地址。 -
socket
基础api:sys/socket.h
中,包括创建、命名、监听socket
;接受连接、发起连接、读写数据、获取地址信息、检测带外标记、读取设置socket
选项 -
网络信息api:主机名和
ip
地址之间的转换、服务名称和端口号之间的转换。netdb.h
中。
socket通信过程
- server端
创建socket()->绑定地址和端口bind()->监听连接listen()->接受连接accept()->发送数据send()->关闭socket close() - client
创建socket()->IP地址转换inet_pton()->连接到服务端connect()->接收数据read()->关闭socket close()
-
TCP:可靠传输,三次握手建立连接,传出去一定接受的到(如聊天软件);
-
UDP:不可靠传输,不需要建立连接,只管发送,实时性好(如视频会议);
-
套接字:表示通信的端点。就像用电话通信,套接字相当于电话,IP地址相当于总机号码,而端口号则相当于分机号码。
TCP:
UDP:
socket地址
-
协议族和地址
+=========+=========+==============+
| 协议族 | 地址族 | 描 述 |
+=========+=========+==============+
| PF_UNIX | AF_UNIX |UNIX本地域协议族|
+=========+=========+==============+
| PF_INET | AF_INET | TCP/IPv4协议族 |
+=========+=========+==============+
| PF_INET6 | AF_INET6 | TCP/IPv6协议族 |
+=========+=========+==============+ -
tcp/ip
协议族有sockaddr_in
和sockaddr_in6
两个专用socket
地址结构体,分别用于ipv4和ipv6
。
// TCP/IPv4协议族
struct sockaddr_in {
sa_family_t sin_family; /* 地址族 */