python3:udp-socket使用方法

socket提供了标准的BSD Socket API

以下为socket定义的常见常量:

socket 类型 描述
socket.AF_INET 用于服务器与服务器之间的网络通信
socket.SOCK_STREAM 基于TCP的流式socket通信
socket.SOCK_DGRAM 基于UDP的数据报式socket通信

常用函数:

Socket 函数 描述
s.bind(address) 将套接字绑定到地址,如果是在AF_INET下,则以无组的方式传入,如s.bind('192.168.1.1', 8080)
s.recvfrom(bufsize[, flag]) 接受UDP套接字的数据,返回值是元组tuple(data, addr)。其中data是包含接受数据的字符串,address是发送数据的套接字地址
s.sendto(string[, flag], address) 发送UDP数据,将数据发送到套接字,address形式为tuple(ipaddr, port),指定远程地址发送,返回值是发送的字节数
s.close() 关闭套接字

 常用步骤如下:

发送方:

  1. 创建socket
  2. 发送data
  3. 关闭socket
import socket


def send_msg():
    # 1. 创建udp socket
    udp_socket_send = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    while True:
        # 1.1 输入要发送的数据
        send_data = input('请输入要发送的数据:')
        if send_data == 'exit':
            break

        # 2. 发送data
        udp_socket_send.sendto(send_data.encode('utf-8'), ('192.168.31.187', 6666))

    # 3. 关闭udp_socket
    udp_socket_send.close()


def main():
    send_msg()


if __name__ == '__main__':
    main()

接收方:

  1. 创建socket
  2. 绑定ip和port
  3. 接收数据
  4. 打印出数据
  5. 关闭socket
import socket


def recv_msg():
    # 1. 创建套接字
    udp_socket_recv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 2. bind ip和port
    ip_port = ('', 6666)
    udp_socket_recv.bind(ip_port)

    while True:
        # 3. 接收msg,recvfrom()返回的是一个元组,[0]是msg, [1]是一个元组的地址(ip, port)
        # 并且接收到的msg=tuple[0]是一个bytes类型,打印出来时是要decode的.
        msg, addr = udp_socket_recv.recvfrom(1024)
        # 4. 打印接收的msg
        print(f'收到来自{str(addr)}的信息:{msg.decode("utf-8")}')

    # 5. 关闭套接字
    udp_socket.close()


def main():
    recv_msg()


if __name__ == '__main__':
    main()

上面的两个实例可以同时run,  一个可以循环接收信息,一个可以循环发送信息 .

你可能感兴趣的:(python)