python UDP套接字通信

发布时间:2019-03-16 22:24:09编辑:auto阅读(1739)

    UDPserver.py

     1 import socket
     2 #导入套接字模块
     3 
     4 s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
     5 # - socket.AF_INET:IPV4
     6 # - socket.STREAM:TCP
     7 # - socket.DGRAM:UDP
     8 
     9 s.bind(('',25555))
    10 #绑定套接字有效地址和端口
    11 #''空位任何地址 本地的127.0.0.1 和局域网还有自己真实的ip
    12 print('[+] Server Open.....')
    13 
    14 while True:
    15     try:
    16         data,c_addr = s.recvfrom(1024)
    17         #一次性接受1024bytes的数据 ,返回一个元组,其中有数据和地址
    18         #UDP不需要构成连接,直接发送即可
    19         print('from:',c_addr)
    20         #c_addr是一个地址,发送消息的客户端的IP和端口的二元组
    21         print('say:%s'%(data.decode('utf-8')))
    22         msg = data.decode('utf-8')
    23         s.sendto(msg.encode('utf-8'),c_addr)
    24         #发送信息,其中有两个参数,一个是信息,一个是目标地址和端口
    25     except KeyboardInterrupt:
    26         break
    27 
    28 print('[+] Server Close......')
    29 s.close

     

     

    UDPclient.py

     1 import socket
     2 #导入套接字模块
     3 
     4 c = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
     5 # - socket.AF_INET:IPV4
     6 # - socket.STREAM:TCP
     7 # - socket.DGRAM:UDP
     8 
     9 while True:
    10     try:
    11         msg = input('>>>')
    12         if msg == 0:
    13             #判断输入是否为空 就是直接回车了
    14             continue
    15         #UDP不需要构成连接,直接发送即可
    16         c.sendto(msg.encode('utf-8'),('127.0.0.1',25555))
    17         #发送消息,其中两个参数,第一个是要发送的信息
    18         #第二个是发送的ip地址和端口,是一个元组
    19 
    20         data,s_addr = c.recvfrom(1024)
    21 
    22         #c_addr是一个地址,发送消息的客户端的IP和端口的二元组
    23         print('$: %s'%(data.decode('utf-8')))
    24     except KeyboardInterrupt:
    25         break
    26 
    27 c.close()

     

    UDP套接字模型

    • UDP不需要构成连接,直接发送即可

    • 服务端模型:

      • s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

      • s.bind(('',25555))

        • data,c_addr = s.recvfrom(1024)

          • 别人发来的消息 就直接发到s服务端套接字了

          • data:发来的数据

          • c_addr:谁发的

        • s.sendto(msg, c_addr)

    • send recv

    • sendto recvfrom

      • 都是阻塞的

关键字