首页 > 技术文章 > python之网络编程

xiao-longxia 2020-09-01 11:08 原文

端口port由来

IP地址主要是确定网络上某个具体的主机具体数据通信主要是通过工作在计算机中的软件执行。当主机A向主机B发送信息时,具体会由主机B上哪个程序接收呢,由此计算机出现了端口port的概念,端口port主要用于区别不同软件的通信渠道,用于正确的将数据通过制定的端口渠道传输给对应的软件。

因此ip地址精确到具体的一台电脑,而端口精确到具体的程序。

 

Socket编程

 

 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

套接字

套接字的概念很简单,每台主机有一个唯一的主机地址标识,同时主机内还有标识自己进程的序号id,称作端口,将这两个标识符结合就构成了一个套接字(socket),这个套接字能唯一标识网络中的一个进程。(网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket, 又称为“套接字”。)

TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;电子邮件、文件传输程序。

UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文,尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。

 

 

4.4.1 TCP编程

4.4.1.1 建立TCP服务器连接的6个步骤

 1、创建socket对象。调用socket构造函数:

基本语法: socket.socket(socket_family, socket_type, protocal=0)

参数:

socket_family: socket 地址家族, AF_UNIX/AF_LOCAL 或者 AF_INET

socket_type:socket 连接类型:1)面向连接的(SOCK_STREAM) 2)面向无连接的(SOCK_DGRAME) protocal:

传输协议,一般不用设置,使用默认值进行自动匹配就好

我们这里选择基于网络类型的数据通信,socket连接类型为面向的连接
socket(AF_INET,SOCK_STREAM)
 
2、将socket绑定(指派)到指定的地址上:
基本语法:socket.bind(address)
参数:address必须为一个双元素的元组,(host,port),主机名或ip地址+端口号。如果端口号正在被使用或者保留,或主机名或ip地址错误,则引发socket.error异常。

如果IP地址为 0.0.0.0 代表本机的任意一个IP           端口  0--1024 为系统保留

IP地址为localhost代表本地主机,指这台计算机,相对应的ip地址为127.0.0.1

3、绑定后,必须准备好套接字,以便接受连接请求:

基本语法:socket.listen(backlog)
参数:backlog
backlog指定最多的连接数,至少为1,接到连接请求后,这些请求必须排队,如果队列已满,则拒绝请求。
 
4、服务器套接字通过socket的accept方法等待客服请求一个连接:
connection,address=socket.accept()
调用accept方法时,socket会进入‘waiting’(阻塞)状态。客服请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的元组,形如(connection,address).第一个元素是新的socket对象,服务器通过它与客服端通信,第二个元素是客户端internet的地址。
 
5、处理阶段,服务器通过send和recv方法通信
 
  服务器调用send,并采用字符串的形式向客服发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客服接受信息。调用recv时,必须指定一个整数来控制本次调用所接受最大的数据量。recv方法在接受数据时会blocket状态,最后返回一个字符串,用它来表示接受的数据。如果发送的量超过recv所允许,数据会被截断。多余的数据将缓冲于接收端。
 
6、调用接受,服务器调用socket的close方法以关闭连接

4.4.1.2 建立TCP客服端

 1、创建socket对象。调用socket构造函数:
2、使用socket的connect方法连接服务器socket.connect((host,port))
3、客户和服务器通过send和recv方法通信:
4、结束后,客户通过调用socket的close方法来关闭理连接

推荐阅读