一、引言
昨天讲了网络编程里it和tcp的一些相关概念,今天讲一下编码转换和socket网络编程
二、编码转换
1.为什么要学习编码转换
在计算机网络中,数据都是以二进制的形式进行传输的。所以在网络传输数据的时候,数据需要先编码转化为二进制(bytes)数据类型
I Love Python => 字符串 => 转换为二进制数据 => 网络中传输
2.数据的编码转换
数据转换方法说明:
| encode | 编码 将字符串转化为字节码 |
| decode | 解码 将字节码转化为字符串 |
提示:encoed()和decode()函数可以接受参数,encoding是指在编解码过程中使用的编码方案。
字符串编码
str.encode(encoding=”utf-8”)二进制解码
bytes.decode(encoding=“utf-8”)三、socket网络编程
1.socket套接字
1.1目前存在的问题
到目前为止我们学习了IP地址和端口号,使用这些我们就可以在茫茫的网络海洋中进行畅游了么?
答案是否定的!只知道IP地址和端口号,没有工具的辅助是无法抵达'诗和远方的'
1.2socket套接字
那我们需要什么工具呢?
socket套接字工具,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
这就好比现实中的电话,当知道了对方的电话号码后需要使用电话才能进行通讯,程序之间想要进行网络通信需要基于这个socket套接字,socket套接字就是程序间进行网络通讯的工具。
1.3socket使用场景
不夸张地说,只要跟网络相关的应用和程序基本都使用了socket
2.TCP客户端及服务器端开发实践
2.1TCP网络应用程序开发分类
TCP网络应用程序开发分为客户端开发和服务器端开发,客户端程序是指运行在用户设备上的程序,服务端程序是指运行在服务器设备上的程序,专门为客户端提供数据服务。
2.2 TCP客户端程序开发流程及应用实践(五步走)
拿打电话来举例的话就是:
1.创建客户端套接字对象(买手机)
2.和服务端套接字建立联系(打电话)
3.发送数据(说话)
4.接收数据(接电话)
5.关闭客户端和服务端(挂电话
socket类的参数和方法说明:
| AddressFamily | IP地址类型, 分为IPv4和IPv6 |
| Type | 传输协议类型 |
开发客户端需要使用的函数:
connect:和服务端套接字建立联系
send:发送数据
recv:接收数据
close:关闭连接
TCP客户端程序开发实践:
import socket if __name__ == '__main__': #加一层保护 # 1、创建客户端套接字对象 tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2、和服务器端套接字建立连接(参数必须是一个元祖) tcp_client_socket.connect(("192.168.31.181", 8080)) # 3、发送数据 tcp_client_socket.send('hell, itheima'.encode(encoding='utf-8')) # 4、接收数据 recv_data = tcp_client_socket.recv(1024).decode('utf-8') print(recv_data) # 5、关闭客户端套接字 tcp_client_socket.close()3.TCP服务器端开发流程及应用实践(七步走)
1.创建服务端套接字对象
2.绑定ip地址和端口号
3.设置监听
4.等待接收客户端的连接请求
5.接收数据
6.发送数据
7.关闭套接字
客户端socket类的参数和方法说明:
| AddressFamily | IP地址类型, 分为TPv4和IPv6 |
| Type | 传输协议类型 |
开发服务器端需要使用的函数:
| bind | 绑定IP地址和端口号 |
| listen | 设置监听 |
| accept | 等待接受客户端的连接请求 |
| send | 发送数据 |
| recv | 接收数据 |
TCP服务器端程序开发实践
import socket if __name__ == '__main__': # 1、创建服务器端套接字对象 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2、绑定IP地址与端口号 tcp_server_socket.bind(("", 8888)) # 3、开启监听 tcp_server_socket.listen(128) # 4、等待接收客户端连接请求 conn_socket, ip_port = tcp_server_socket.accept() print('客户端IP+端口:', ip_port) # 5、接收数据 recv_data = conn_socket.recv(1024) print('接收到的数据:', recv_data.decode()) # 6、发送数据 conn_socket.send("客户端的数据已经收到了".encode()) # 7、关闭套接字 conn_socket.close() tcp_server_socket.close()四、结语
明天接着给大家讲多任务编程.