Socket 编程预备
1、认识端口号
端口号(port)是传输层协议的内容
• 端口号是一个2字节16位的整数;
• 端口号用来标识一个进程,告诉操作系统,当前的这个数据要交给哪一个进程来 处理;
• IP地址+端口号能够标识网络上的某一台主机的某一个进程;
• 一个端口号只能被一个进程占用.
0-1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的 端口号都是固定的.
1024-65535:操作系统动态分配的端口号.客户端程序的端口号,就是由操作 系统从这个范围分配的.
C++ socket n. (电源)插座;(电器上的)插口,插孔,管座;槽;窝;托座;臼;孔穴 vt. 把…装入插座;给…配插座
我们把ip+port叫做套接字socket 所以,网络通信的本质,也是进程间通信
2、TCP VS UDP
TCP 协议:传输层的有连接协议,能可靠传输,基于字节流工作
UDP 协议:传输层的无连接协议,传输不可靠,面向数据报
3. 网络字节
序发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出;
• 接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从 低到高的顺序保存;
• 因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高 地址.
• TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节.
• 不管这台主机是大端机还是小端机,都会按照这个TCP/IP规定的网络字节序来 发送/接收数据;
• 如果当前发送主机是小端,就需要先将数据转成大端;否则就忽略,直接发送即 可
4. socket 编程接口
socket 常见API// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)int socket(int domain, int type, int protocol);// 绑定端口号 (TCP/UDP, 服务器)int bind(int socket, const struct sockaddr *address,socklen_t address_len);// 开始监听socket (TCP, 服务器)int listen(int socket, int backlog);// 接收请求 (TCP, 服务器)int accept(int socket, struct sockaddr* address,socklen_t* address_len);// 建立连接 (TCP, 客户端)int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);