python之socket编程(UDP)

socket

socket介绍

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

socket的使用

udp发送数据

步骤

  • 1、创建套接字
    • socket.socket([family[, type[, proto]]])
    • family: 套接字家族可以使AF_UNIX或者AF_INET
    • type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM
    • protocol: 一般不填默认为0.
    • 代码示例
      udp_s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
      
  • 2、发送数据
    • sendto(self, data: bytes, address: _Address)
    • data:发送的内容,类型为字节型的
    • address:目的地址,一般用元组表示
    • 代码示例
      udp_s.sendto(b'hello', ('192.168.1.3', 8080))
      
  • 3、关闭套接字
    • 代码示例
      udp_s.close()
      

完整演示

import socket


def sendto():
    # 1、创建套接字
    udp_s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
    # 2、发送数据
    while True:
        content = input("请输入要发送的内容:")
        # 默认输入q退出聊天
        if content == 'q':
            break
        # 将字符串转成gbk编码,windows系统默认是gbk编码
        content = content.encode('gbk')
        udp_s.sendto(content, ('192.168.1.3', 8080))
        # 3、关闭套接字
    udp_s.close()


if __name__ == '__main__':
    sendto()

注意: 在发送数据之前,应将所发送字符串转成gbk编码,因为对于windows系统来说默认是gbk编码

udp接收数据

步骤

  • 1、创建套接字
    • 代码示例
          udp_s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
      
  • 2、绑定本地窗口
    • 代码示例
      	addr = ('', 49871)  # 第一个参数默认本地ip地址
      	udp_s.bind(addr)
      
  • 3、接收数据并打印
    • 代码示例
      	data = udp_s.recvfrom(1024)  # 1024最大字节
          infos, from_addr = data  # 拆包,获取数据和用户地址
          infos = str(infos, encoding='gbk')   # 将接收到的信息转码为gbk
          print(f"{from_addr}:{infos}")  # 打印信息
      
  • 4、关闭套接字
    • 代码示例
      udp_s.close()
      

完整演示

import socket
def receive():
    # 1、创建套接字
    udp_s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
    # 2、绑定本地端口
    addr = ('', 49871)  # 第一个参数默认本地ip地址
    udp_s.bind(addr)
    # 3、接收数据并打印
    data = udp_s.recvfrom(1024)  # 1024最大字节
    infos, from_addr = data  # 拆包,获取数据和用户地址
    infos = str(infos, encoding='gbk')   # 将接收到的信息转码为gbk
    print(f"{from_addr}:{infos}")  # 打印信息
    # 4、关闭套接字
    udp_s.close()


if __name__ == '__main__':
    receive()

注意: 接收信息之后,将信息转成gbk编码,否则中文显示不正常,因为对于windows系统来说默认是gbk编码

udp聊天器

步骤

  • 1.创建套接字 套接字作用于收发数据
  • 2.发送数据
  • 3.接收数据
  • 4.关闭套接字

由于上面给出了发送与接收数据的代码,所以就不一步一步解释了,直接上代码
代码示例

扫描二维码关注公众号,回复: 11403692 查看本文章
import socket


def sendto(udp_s):
   # 发送数据
   content = input("请输入要发送的内容:")
   # 将字符串转成gbk编码,windows系统默认是gbk编码
   content = content.encode('gbk')
   udp_s.sendto(content, ('192.168.1.3', 8080))


def receive(udp_s):

   # 接收数据并打印
   data = udp_s.recvfrom(1024)  # 1024最大字节
   infos, from_addr = data  # 拆包,获取数据和用户地址
   infos = str(infos, encoding='gbk')   # 将接收到的信息转码为gbk
   print(f"{from_addr}:{infos}")  # 打印信息


def main():
   # 1、创建套接字
   udp_s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)

   # 2、绑定本地端口
   addr = ('', 49871)  # 第一个参数默认本地ip地址
   udp_s.bind(addr)

   while True:
       # 3、发送数据
       sendto(udp_s)

       # 4、接收数据
       receive(udp_s)

   # 5、关闭套接字
   udp_s.close()


if __name__ == '__main__':
   main()

最后,有喜欢博主写的内容的伙伴可以点赞收藏加关注哦!

猜你喜欢

转载自blog.csdn.net/weixin_44604586/article/details/106968622