socket通讯原理:
套接字
套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要。和大多数语言一样,Python 支持面向连接和无连接,实现接口功能与步骤也大致相同。
面向连接即需要先连接然后通讯, 面向连接主要协议就是传输控制协议(tcp),要创建tcp套接字时需要指定套接字类型为 SOCK_STRAM,表达了他作为流套接字的特点。
无连接,顾名思义无需建立连接就可以进行通讯,这时数据到达顺序、可靠性就无法保证了。实现这种连接的协议就是用户数据包协议(udp)。创建UDP时需要指定套接字类型为 SOCK_DGRAM。
套接字地址:主机-端口号
打个比喻,套接字就像一个电话插孔,主机名和端口号就像区号和号码。
当程序之间需要通信时,需要知道对端的主机名(IP)和端口号。
说明:
有效的端口号范围为0~65535(小于1024的端口号预留给了系统)
特点:
- 面向连接的套接字: TCP套接字的名字SOCK_STREAM,为了创建 TCP套接字,必须使用 SOCK_STREAM 作为套接字类型。
- 无连接的套接字: UDP套接字的名字SOCK_DGRAM 实现这种连接类型的主要协议是用户数据报协议(缩写 UDP)。为
了创建UDP套接字,必须使用SOCK_DGRAM作为套接字类型。 DGRAM = datagram (数据报)