主机字节序和网络字节序
- 大端字节序(big endian):一个整数的高位字节存储在内存的低地址处。
- 小端字节序(little endian):低位字节存放在内存的低地址处。
应该熟练掌握的socket函数
函数名称 | 说明 |
---|---|
socket | 创造某种类型的套接字 |
bind | 将一个socket绑定到一个IP与端口的二元组上 |
listen | 将一个socket变为监听状态 |
connect | 试图建立一个TCP连接,一般用于客户端 |
accept | 尝试接收一个连接,一般用于服务端 |
send | 通过一个socket发送数据 |
recv | 通过一个socket收取数据 |
select | 判断一组socket上的读写和异常事件 |
gethostbyname | 通过域名获取机器地址 |
close | 关闭一个套接字,回收socket对应的资源 |
shutdown | 关闭socket手法通道 |
setsockopt | 设置一个套接字选项 |
getsocket | 获取一个套接字选项 |
通用socket地址
#include <bits/socket.h>
struct sockaddr
{
sa_family_t sa_family;
char sa_data[14];
}
专用socket地址
struct sockaddr_in
{
sa_family_t sim_family;
u_int16_t sin_port;
struct in_addr sin_addr;
};
struct in_addr
{
u_int32_t s_addr;
};
struct socketaddr_in6
{
sa_family_t sin6_family;
u_int16_t sin6_port;
u_int32_t sin6_flowinfo;
struct in6_addr sin6_addr;
u_int32_t sin6_scope_id;
};
struct in6_addr
{
unsigned char sa_addr[16];
};
TCP网络通信基本流程
服务端
- 调用socket函数创建socket。
- 调用bind函数将socket绑定到某个IP和端口的二元组上。
- 调用listen函数开启监听。
- 当有客户端请求连接,调用accept接受连接,产生一个新的socket。
- 基于新产生的socket调用send或recv函数,进行通信。
- 通信结束后,调用close函数关闭监听socket。
客户端
- 调用socket函数创建socket。
- 调用connect函数尝试连接服务器。
- 连接成功后调用send或recv函数,开始与服务器进行数据交流。
- 通信结束后,调用close函数关闭socket
socket函数
socket是一个文件,是一个可读、可写、可控制、可关闭的文件描述符。
#include