Python课程-w73班
Louyj's Blog
Toggle navigation
Python课程-w73班
Home
班级课件
课堂代码
课后作业
学习资料
Archives
Tags
2022-05-15课件
2022-05-15 08:29:46
6
0
0
python-w73
前面我们了解了TCP/IP协议、IP地址和端口的基本概念,下面我们开始了解网络编程。 网络编程中有一个基本组件——套接字(socket)。套接字主要是两个程序之间的“信息通道”。 程序(通过网络连接)可能 分布在不同的计算机上,通过套接字相互发送信息。 socket是网络编程的一个抽象概念。通常我们用一个socket表示“打开了一个网络连接”,而打开一个socket需要知道目标计 算机的IP地址和端口号,并且指定协议类型。 大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的是客户端,被动响应连接的是服务器。 socket编程交互模型如下图所示  #服务器编程 服务器编程首先要绑定一个端口,监听来自其他客户端的连接。如果某个客户端发起连接了,服务器就与该客户端建立socket 连接,随后的通信就靠这个socket连接了。 服务器会打开固定端口监听,每发起一个客户端连接,就创建该socket连接。由于服务器有大量来自客户端的连接,因此要能 够区分一个socket连接是和哪个客户端绑定的。确定4项唯一的socket依赖:服务器地址、服务器端口、客户端地址、客户端端 口。  服务端创建流程 一般来说,建立服务器连接需要6个步骤。 ##创建socket对象 在Python中, import socket 后,用 socket.socket() 方法来创建套接字,语法格式如下 s = socket.socket([family[, type[, proto]]]) 参数说明: - family: 套接字家族,可以使 AF_UNIX 或者 AF_INET ,默认 AF_INET - type: 套接字类型,根据是面向连接的还是非连接分为 SOCK_STREAM 或 SOCK_DGRAM ,也就是 TCP 和 UDP 的区别。默 认 SOCK_STREAM - protocol: 一般不填默认为0。 直接socket.socket(),则全部使用默认值。 下面是具体的参数定义:  ##绑定地址 将socket绑定(指派)到指定地址上 socket.bind(address) address必须是一个双元素元组((host,port)),参数为主机名或ip地址+端口号。如果端口号正在被使用或保留、主机名或IP地址 错误,就会引发socke.error异常。 ##启动监听 绑定后必须准备好套接字,以便接受连接请求。 请求方式如下: socket.listen(backlog) backlog用于指定最多连接数,至少为1。接到连接请求后,这些请求必须排队,如果队列已满,就拒绝请求。 ##接受客户端连接 服务器套接字通过socket的accept方法等待客户请求一个连接 请求方式如下: connection,address=socket.accept() 调用accept方法时,socket会进入等待(或阻塞)状态。客户请求连接时,accept方法建立连接并返回服务器。accept方法返 回一个含有两个元素的元组,如(connection, address)。第一个元素(connection)是新的socket对象,服务器通过它与客 户通信;第二个元素(address)是客户的互联网地址。 ##数据传输 服务器和客户通过send和recv方法通信(传输数据) 服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。 服务器使用recv方法从客户接收信息。调用recv时,必须指定一个整数控制本次调用所接收的最大数据量。recv方法在接收数据 时会进入block状态,最后返回一个字符串,用于表示收到的数据。 如果发送的量超过recv允许的量,数据就会被截断。多余的数据将缓冲于接 收端。以后调用recv时,多余的数据会从缓冲区删 除。 ##传输结束 服务器调用socket的close方法以关闭连接。 #服务器端方法 通过s = socket.socket()方法,我们可以获得一个socket对象s,也就是通常说的获取了一个“套接字”,该对象具有以下服务 器端方法:  注意事项: - Python3以后,socket传递的都是bytes类型的数据,字符串需要先转换一下,string.encode()即可;另一端接收到的 bytes数据想转换成字符串,只要bytes.decode()一下就可以。 - 在正常通信时,accept()和recv()方法都是阻塞的。所谓的阻塞,指的是程序会暂停在那,一直等到有数据过来。 #客户端编程 客户端创建流程 建立一个简单的客户连接需要4个步骤。 ##创建socket对象 创建socket对象同服务端 s = socket.socket([family[, type[, proto]]]) ##连接服务器 通过 connect 方法连接服务器 格式为 socket.connect((host,port)) 其中: - host为服务器端地址 - port为服务器端监听的端口 ##数据传输 服务器和客户通过send和recv方法通信(传输数据) ##传输结束 结束后,客户通过调用socket的close方法关闭连接 #客户端方法 通过s = socket.socket()方法,我们可以获得一个socket对象s,也就是通常说的获取了一个“套接字”,该对象具有以下客户 端方法: 
Pre:
2022-05-15课堂代码
Next:
2022-05-08课堂代码
0
likes
6
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Submit
Sign in
to leave a comment.
No Leanote account?
Sign up now.
0
comments
More...
Table of content
No Leanote account? Sign up now.