python UDP套接字通信

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

    • 都是阻塞的

posted @ 2018-10-10 00:41  lonelyshy  阅读(1112)  评论(0编辑  收藏  举报