author: UpDown published: True created: 2022年5月10日20点16分 tags: Done version: Outer
参考:https://blog.updown.world/articles/python/pythonbook5/index.html
socket
socket(简称 套接字) 是进程(就是运行中的程序)间通信的一种方式
UDP
- 创建客户端套接字
- 发送/接收数据
- 关闭套接字

socket.socket(socket.AF_INT,sockt.SOCK_DGRAM)s.sendto(text, ('1.1.1.1',88))d,add = s.recvfrom(1024)s.bind(('1.1.1.1', 88))s.recv(1024)
发送
import socket# 1. 创建udp套接字udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)# 2. 准备接收方的地址# '192.168.1.103'表示目的ip地址# 8080表示目的端口dest_addr = ('192.168.1.103', 11000) # 注意 是元组,ip是字符串,端口是数字# 3. 定义发送的数据send_data = input("请输入要发送的数据:")# 4. 发送数据到指定的电脑上的指定程序中udp_socket.sendto(send_data.encode('gbk'), dest_addr)# 5. 关闭套接字udp_socket.close()
接收
import socket# 1. 创建udp套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 2.绑定ip和端口udp_socket.bind(('192.168.15.130', 11000))# 3. 等待接收对方发送的数据recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数# 4. 显示对方发送的数据print(recv_data)# 接收到的数据recv_data是一个元组# 第1个元素是对方发送的数据# 第2个元素是对方的ip和端口print(recv_data[0].decode('gbk'))print(recv_data[1])# 5. 关闭套接字udp_socket.close()
UDP广播
import socket# 1. 创建UDP套接字s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 2. 设置UDP套接字允许其广播(注意如果udp套接字需要广播,则一定要添加此语句)s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)# 选做 绑定本地信息# s.bind(("", 8080))# 4. 向本局域网中发送广播数据# 此时只要是本局域网中的电脑上有 用1060端口的udp程序 它就会收到此数据dest_info = ("<broadcast>", 8080) # <broadcast>会自动改为本局域网的广播ips.sendto('hello world !'.encode('utf-8'), dest_info)# 5. 关闭套接字s.close()
TCP
socket.socket(socket.AF_INT,sockt.SOCK_STREAM)s.connect(('1.1.1.1',88))s.send(text)d,add = s.recvfrom(1024)s.bind(('1.1.1.1',7788))s.listen(128)d, addr = s.accept()d.recv(1024)
发送
import socket# 1. 创建TCP套接字client_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2. 链接服务器client_s.connect(("192.168.1.104", 8080))# 3. 获取要发送的数据send_content = input("请输入要发送的数据内容:")# 4.1 发送数据client_s.send(send_content.encode("utf-8"))# 4.2 接收数据recv_content = client_s.recv(1024)print(recv_content.decode("gbk"))# 5. 关闭套接字client_s.close()
接收
import socket# 1. 创建TCP套接字server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2. 绑定本地信息server_s.bind(("", 7788))# 3. 设置为被动的server_s.listen(128)# 4. 等待客户端链接new_s, client_info = server_s.accept()# 5. 用新的套接字为已经连接好的客户端服务器while True:recv_content = new_s.recv(1024)print("%s>>>%s" % (str(client_info), recv_content.decode("gbk")))if not recv_content:# 当客户端调用了close后,recv返回值为空,此时服务套接字就可以close了# 6. 关闭服务套接字new_s.close()break# 7. 关闭监听套接字server_s.close()
