什么是Socket
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
可以把Socket理解成类似插座的东西, 通过Socket就可以发送和接受数据了, 就像插座插上电器之后就可以向外提供电能了.
TCP编程的客户端和服务器端都是通过Socket来完成的.
其实UDP协议通信也是使用的套接字, 和TCP协议稍有差别. TCP是面向连接的套接字, 而UDP是面向无连接的套接字.
套接字的起源可以追溯到20世纪70年底, 他是加利福尼亚大学的伯克利版本 Unix(也成 BSD Unix) 的一部分. 因此, 有时你可能会听过将套接字称为伯克利套接字或 BSD 套接字.
套接字最初是为同一主机上的应用程序锁创建, 使得主机上一个程序(也叫一个进程)与另一个允许的程序进行通信. 这就是所谓的进程间通信(Inter Process Communication IPC)
Socket families
有两种类型的套接字: 基于文件的和基于网络的.
基于文件的套接字:AF_UNIX
AF_UNIX是基于文件的套接字.
因为两个进程允许在同一台计算机上, 所以这些套接字都是基于文件的, 这意味着文件系统支持他们的底层基础结构. 这是能够说的通的, 因为文件系统是一个运行在同一主机上的多个进程之间的共享常量.
AF_UNIX在编程的时候并不是太常用.
基于网络的套接字:AF_INET
AF_INET用于基于网络的Socket. 还有一个地址家族AF_INET6, 用于IPv6.
其实还有一些其他地址家族, 哪些要么是专业的, 过时的, 很少使用的, 要么是仍未实现的.
在所有的地址家族中, AF_INET是使用最广泛的.
因为本章重点讨论网络编程, 所以本章剩余的内容中, 都是将使用AF_INET
socket模块
要创建套接字, 必须使用socket模块下的socket()函数.
他的一般语法如下:
import socket
socket.socket(socket_family, socket_type, protocal=0)
说明:
其中,
socket_family是AF_UNIX 或 AF_INET,Socket_type如果是TCP编程是SOCKET_STREAM, 如果是 UDP 编程则使用SOCKET_DGRAM.protocal通常省略, 默认是0返回值就是
Socket对象.Socket对象提供了一些方法来让我们操作这些套接字.