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>会自动改为本局域网的广播ip
s.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()