什么是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)

说明:

  1. 其中, socket_familyAF_UNIX 或 AF_INET, Socket_type如果是TCP编程是SOCKET_STREAM, 如果是 UDP 编程则使用SOCKET_DGRAM. protocal通常省略, 默认是0

  2. 返回值就是Socket对象. Socket对象提供了一些方法来让我们操作这些套接字.

Copyright © 李振超 2018 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-02-25 07:12:09

results matching ""

    No results matching ""