开发PythonPython Socket 编程快速入门
Zelas2XerathPython Socket 编程
课前了解
Python 网络编程 | 菜鸟教程 (runoob.com)
TCP和UDP的最完整的区别 - 割肉机 - 博客园 (cnblogs.com)
不同的电脑上的进程之间如何通信
在一台电脑上可以通过进程号PID来标识一个唯一的进程,但是在网络中是行不通的。
其实TCP/IP协议族已经帮我们解决了这个问题﹐网络层的ip地址可以唯一标识网络中的主机﹐而传输层的“协议+端口”可以唯―标识主机中的应用进程
这样利用ip地址﹐协议﹐端口就可以标识网络的进程了﹐网络中的进程通信就可以利用这个标志与其它进程进行交互
什么是 Socket?
Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
socket是进程间通信的一种方式﹐它与其他进程间通信的一个主要不同是︰
它能实现不同主机间的进程间通信﹐我们网络上各种各样的服务大多都是基于Socket 来完成通信的例如我们每天浏览网页·QQ聊天·收发email 等等
UDP套接字
套接字的使用流程(好比是写信)
![image-20211204140010775](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
服务端
- 创建套接字
- 使用套接字收/发数据
- 关闭套接字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from socket import *
udp_socket = socket(AF_INET,SOCK_DGRAM)
dest_addr = ('127.0.0.1',6666)
send_data = input("请输入要发送的数据:")
udp_socket.sendto(send_data.encode("utf-8"),dest_addr)
udp_socket.close()
|
客户端
- 创建客户端套接字
- 绑定 本地信息
- 发送/接收数据
- 关闭套接字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| from socket import *
udp_socket = socket(AF_INET, SOCK_DGRAM)
local_addr = ('',8888) udp_socket.bind(local_addr)
recv_data = udp_socket.recvfrom(1024)
print(recv_data[0].decode('gbk')) print(recv_data[1])
udp_socket.close()
|
TCP套接字
套接字的使用流程(好比是打电话)
可靠性高
![image-20211204140138682](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
TCP通信需要经过创建连接、数据传送﹑终止连接三个步骤。
TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,”打电话””
TCP客户端构建
- 创建socket
- 连接服务器
- 发送/接收数据
- 关闭socket连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from socket import *
tcp_client_socket = socket(AF_INET, SOCK_STREAM)
tcp_client_socket.connect("",6789)
send_data = input("请输入要发送的数据")
tcp_client_socket.send(send_data.encode("gbk"))
recvData = tcp_client_socket.recv(1024) print(recvData.decode("gbk"))
tcp_client_socket.close()
|
TCP服务端的构建
- socket创建一个套接字
- bind绑定ip和port
- 使用listen令套接字变为被动连接
- accept等待客户端的连接
- recv/send接收发送数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| from socket import *
tcp_server_socket = socket(AF_INET,SOCK_STREAM)
local_bind = ('', 7892) tcp_server_socket.bind(local_bind)
tcp_server_socket.listen(128)
new_client_socket, client_addr = tcp_server_socket.accept() print('---连接成功---')
recv_data = new_client_socket.recv(1024) print(recv_data.decode("gbk"))
new_client_socket.send("Yes,I'm OK".encode("gbk"))
new_client_socket.close() tcp_server_socket.close()
|