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

  1. 创建客户端套接字
  2. 发送/接收数据
  3. 关闭套接字

image.png

  1. socket.socket(socket.AF_INT,sockt.SOCK_DGRAM)
  2. s.sendto(text, ('1.1.1.1',88))
  3. d,add = s.recvfrom(1024)
  4. s.bind(('1.1.1.1', 88))
  5. s.recv(1024)

发送

  1. import socket
  2. # 1. 创建udp套接字
  3. udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  4. # 2. 准备接收方的地址
  5. # '192.168.1.103'表示目的ip地址
  6. # 8080表示目的端口
  7. dest_addr = ('192.168.1.103', 11000) # 注意 是元组,ip是字符串,端口是数字
  8. # 3. 定义发送的数据
  9. send_data = input("请输入要发送的数据:")
  10. # 4. 发送数据到指定的电脑上的指定程序中
  11. udp_socket.sendto(send_data.encode('gbk'), dest_addr)
  12. # 5. 关闭套接字
  13. udp_socket.close()

接收

  1. import socket
  2. # 1. 创建udp套接字
  3. udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  4. # 2.绑定ip和端口
  5. udp_socket.bind(('192.168.15.130', 11000))
  6. # 3. 等待接收对方发送的数据
  7. recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数
  8. # 4. 显示对方发送的数据
  9. print(recv_data)
  10. # 接收到的数据recv_data是一个元组
  11. # 第1个元素是对方发送的数据
  12. # 第2个元素是对方的ip和端口
  13. print(recv_data[0].decode('gbk'))
  14. print(recv_data[1])
  15. # 5. 关闭套接字
  16. udp_socket.close()

UDP广播

  1. import socket
  2. # 1. 创建UDP套接字
  3. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  4. # 2. 设置UDP套接字允许其广播(注意如果udp套接字需要广播,则一定要添加此语句)
  5. s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
  6. # 选做 绑定本地信息
  7. # s.bind(("", 8080))
  8. # 4. 向本局域网中发送广播数据
  9. # 此时只要是本局域网中的电脑上有 用1060端口的udp程序 它就会收到此数据
  10. dest_info = ("<broadcast>", 8080) # <broadcast>会自动改为本局域网的广播ip
  11. s.sendto('hello world !'.encode('utf-8'), dest_info)
  12. # 5. 关闭套接字
  13. s.close()

TCP

  1. socket.socket(socket.AF_INT,sockt.SOCK_STREAM)
  2. s.connect(('1.1.1.1',88))
  3. s.send(text)
  4. d,add = s.recvfrom(1024)
  5. s.bind(('1.1.1.1',7788))
  6. s.listen(128)
  7. d, addr = s.accept()
  8. d.recv(1024)

发送

  1. import socket
  2. # 1. 创建TCP套接字
  3. client_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  4. # 2. 链接服务器
  5. client_s.connect(("192.168.1.104", 8080))
  6. # 3. 获取要发送的数据
  7. send_content = input("请输入要发送的数据内容:")
  8. # 4.1 发送数据
  9. client_s.send(send_content.encode("utf-8"))
  10. # 4.2 接收数据
  11. recv_content = client_s.recv(1024)
  12. print(recv_content.decode("gbk"))
  13. # 5. 关闭套接字
  14. client_s.close()

接收

  1. import socket
  2. # 1. 创建TCP套接字
  3. server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  4. # 2. 绑定本地信息
  5. server_s.bind(("", 7788))
  6. # 3. 设置为被动的
  7. server_s.listen(128)
  8. # 4. 等待客户端链接
  9. new_s, client_info = server_s.accept()
  10. # 5. 用新的套接字为已经连接好的客户端服务器
  11. while True:
  12. recv_content = new_s.recv(1024)
  13. print("%s>>>%s" % (str(client_info), recv_content.decode("gbk")))
  14. if not recv_content:
  15. # 当客户端调用了close后,recv返回值为空,此时服务套接字就可以close了
  16. # 6. 关闭服务套接字
  17. new_s.close()
  18. break
  19. # 7. 关闭监听套接字
  20. server_s.close()