socket编程
Socket套接字
套接字是操作系统内核中的一个数据结构,是网络中节点进行相互通信的门户,可以标识一个网络进程的ID。
将TCP/IP消息进行了隐藏在了socket接口下
套接字 = (IP地址,端口号)
套接字分类
- 流式socket (SOCK_STREAM):用于TCP协议
- 数据报socket (SOCK_DGRAM):用于UDP协议
- 原始socket (SOCK_RAW):用于测试新的网路协议
套接字数据结构
struct sockaddr_in
struct sockaddr_in{
short int sa_family; //协议族
unsigned short int sin_port; //端口号
struct in_addr sin_addr; //IP地址
unsigned char sin_zero[8]; // 填充0,无特别意义
}
struct in_addr{
unsigned long int s_addr; //32位的IPv4地址,网络字节序
}
#include <netinnet/in.h> //头文件
sa_family:AF_INET IPv4协议;AF_INET6 IPv6协议
如何使用socket?
服务器端
- 创建socket,绑定到服务器的IP和端口
- 开始监听 listen
- 等待并接受客户端的连接请求,返回新的socket(accept)
- 由新的socket与客户端进行读写write和read
- 关闭连接
客户端
- 创建socket(绑定本机随机端口,这个系统自行完成)
- 连接服务器(connect),与服务器进行读写write和read
- 关闭连接