当前位置 博文首页 > python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子

    python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子

    作者:admin 时间:2021-07-08 17:47

    UDP广泛应用于需要相互传输数据的网络应用中,如QQ使用的就是UDP协议。在网络质量不好的情况下,使用UDP协议时丢包现象十分严重,但UDP占用资源少,处理速度快,UDP依然是传输数据时常用的协议。

    下面是用python实现UDP服务器的代码:

    复制代码 代码如下:

    #!/usr/bin/env python
    import socket
    address=('127.0.0.1',10000)
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    s.bind(address)
    while 1:
     data,addr=s.recvfrom(2048)
     if not data:
      break
     print "got data from",addr
     print data
    s.close()

    UDP客户端的代码:

    复制代码 代码如下:

    #!/usr/bin/env python
    import socket
    addr=('127.0.0.1',10000)
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    while 1:
     data=raw_input()
     if not data:
      break
     s.sendto(data,addr)
    s.close()

    运行这两个程序,会显示以下结果:

    服务器端:

    客户端:


    UDP的应用

    在局域网中,如果要想局域网内所有计算机发送数据,可以使用广播,广播不能用TCP实现,可以用UDP实现,接受方收到广播数据后,如果有进程在侦听这个端口,就会接收数据,如果没有进程侦听,数据包会被丢弃。

    广播的发送方:

    复制代码 代码如下:

    #!usr/bin/env python
    import socket
    host=''
    port=10000
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
    s.bind((host,port))
    while 1:
     try:
      data,addr=s.recvfrom(1024)
      print "got data from",addr
      s.sendto("broadcasting",addr)
      print data
     except KeyboardInterrupt:
      raise

    广播的接收方:

    复制代码 代码如下:

    #!/usr/bin/env python
    import socket,sys
    addr=('<broadcast>',10000)
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
    s.sendto("hello from client",addr)
    while 1:
     data=s.recvfrom(1024)
     if not data:
      break
     print data


    运行广播程序,发送端会显示以下结果:

    复制代码 代码如下:

    got data from (‘<地址>',<端口号>)

    hello fromclient

    接收端会显示以下结果:

    复制代码 代码如下:
    (‘broading',(<IP地址>,10000))

    jsjbwy