Python之TCP网络编程
创始人
2024-02-03 23:04:12
0

目录

1. python3编码转换

2. TCP网络应用程序开发

2.1 概述

2.2 开发流程

 2.3 TCP客户端程序开发

2.4 TCP服务端程序开发

2.5 注意点

3. socket之send和recv原理

4. 案例


1. python3编码转换

1.网络传输是以二进制数据进行传输的。

2.数据转化用到了encode和decode函数:

  • str.encode(encoding="utf-8")
  • bytes.decode(encoding="utf-8")

2. TCP网络应用程序开发

2.1 概述

1.TCP网络应用程序开发分为客户端程序开发和服务端程序开发。

2.主动发起建立连接请求的是客户端程序。

3.等待接受连接请求的是服务端程序。

2.2 开发流程

 2.3 TCP客户端程序开发

1.创建客户端套接字对象(买电话)

2.和服务端套接字建立连接(打电话)

3.发送数据(说话)

4.接收数据(接听)

5.关闭客户端套接字(挂电话)

import socketif __name__ == '__main__':# 1.创建客户端套接字对象(AF_INET表示IP地址类型是IPv4,SOCK_STREAM表示传输协议类型是TCP)tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.和服务端套接字建立连接tcp_client_socket.connect(("192.168.56.1",8080))# 3.发送数据tcp_client_socket.send("nihaoma".encode(encoding="utf-8"))# 4.接受数据(recv阻塞等待数据的到来)recv_data = tcp_client_socket.recv(1024)# decode函数的字符集默认是utf-8print("客户端接收到的数据:",recv_data.decode())# 5.关闭客户端套接字tcp_client_socket.close()

客户端发送:

nihaoma

服务端接收:

服务端发送:

客户端接收:

2.4 TCP服务端程序开发

1.创建服务端套接字对象

2.绑定IP地址和端口号

3.设置监听

4.等待接受客户端的连接请求

5.接收数据

6.发送数据

7.关闭套接字

import socketif __name__ == '__main__':# 1.创建服务端套接字对象tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置端口复用(程序退出时,端口号立即释放)tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)# 2.绑定IP地址和端口号# tcp_server_socket.bind(("192.168.43.163",8888))# 如果bind中的参数第一个ip地址元素设置为"",默认为本机IP地址tcp_server_socket.bind(("", 8888))# 3.设置监听(128代表服务端等待排队连接的最大数量)tcp_server_socket.listen(128)# 4.等待接受客户端的连接请求(accept阻塞等待,返回一个和客户端通信的socket和客户端地址)conn_socket, ip_port = tcp_server_socket.accept()print("客户端地址:", ip_port)# 5.接收数据recv_data = conn_socket.recv(1024)print("服务端接收到的数据:",recv_data.decode())# 6.发送数据conn_socket.send("nihao".encode())# 7.关闭套接字conn_socket.close()tcp_server_socket.close()

客户端发送:

服务端接收:

服务端发送:

nihao

客户端接收:

 

2.5 注意点

3. socket之send和recv原理

不管是recv还是send都不是直接接收到对方的数据和发送数据到对方。

发送数据会写入到发送缓冲区,接收数据是从接收缓冲区来读取。

发送数据和接收数据最终是由操作系统控制网卡来完成。

4. 案例

开发一个多任务版TCP服务端程序,实现一个服务端同时服务多个客户端。

分析:多个需要用到循环,同时需要用到多线程。

import socket
import threadingdef handle_client(conn_socket):# 3.5接收数据recv_data = conn_socket.recv(1024)print("服务端接收到的数据:", recv_data.decode())# 3.6发送数据conn_socket.send("nihao".encode())# 3.7关闭与客户端通信的套接字conn_socket.close()if __name__ == '__main__':# 1.创建服务端套接字对象tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置端口复用tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)# 2.绑定IP地址和端口号# tcp_server_socket.bind(("192.168.43.163",8888))# 如果bind中的参数第一个ip地址元素设置为"",默认为本机IP地址tcp_server_socket.bind(("", 8888))# 3.循环接收客户端的连接请求while True:# 3.1设置监听(128代表服务端等待排队连接的最大数量)tcp_server_socket.listen(128)# 3.2等待接受客户端的连接请求(accept阻塞等待,返回一个和客户端通信的socket和客户端地址)conn_socket, ip_port = tcp_server_socket.accept()print("客户端地址:", ip_port)# 3.3创建多线程用来同时接收多个客户端的请求sub_thread = threading.Thread(target=handle_client,args=(conn_socket,))# 3.4启动线程执行任务sub_thread.start()# 4.关闭服务端套接字tcp_server_socket.close()

服务端:

客户端1:

客户端2:

 

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...