python & udp做简单的消息传递


内网的出口ip地址是动态变化的,而且是路由器动态分配的,在家如果想要连上,理论上需要拿到当前路由器的出口ip地址,及局域网内的端口映射即可. 

于是我们可以通过一个简单的python小程序,访问远程地址,拿到当前动态分配的ip.

1.0 版本是这样的 有客户端 有服务端  


# -*- coding:utf-8 -*-
import socket
def udpClient():
	address=('127.0.0.1',8080)
	udpClientSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
	
	while True:
		data=raw_input('>')
		if not data:
			break
		udpClientSocket.sendto(data,address) 
		data,addr=udpClientSocket.recvfrom(2048)
		print data
	udpClientSocket.close()

udpClient()



server

# -*- coding:utf-8 -*-
import socket
from time import ctime

def udpServer():
	buffer=2048
	address=('127.0.0.1',8080)
	udpsock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
	udpsock.bind(address)
	while True:
		print 'wait for message...'
		data,addr=udpsock.recvfrom(buffer)
		udpsock.sendto('[%s]%s' %(ctime(),data),addr)
		print '...received from and retuned to:',addr
	udpsock.close()


udpServer()


2..0版是这样的  有服务端 无客户端

客户端是 一个定时任务 格式为:         

 echo 想要发送的内容 > /dev/udp/服务端p/服务端port

 样例 :               echo something what ?  > /dev/udp/192.168.0.1/9090

服务端是这样的  

root@localhost:/me/udpservices# more server.py 
# -*- coding:utf-8 -*-
import socket
from time import *
 
def udpServer():
    buffer=2048
    address=('0.0.0.0',1990)
    try:   
        udpsock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        udpsock.bind(address)
        
        while True:
            print 'wait for message...'
            data,addr=udpsock.recvfrom(buffer)
            timestr=strftime("%Y-%m-%d %H:%M:%S",localtime())   
            print addr[0]
            udpsock.sendto('%s' %(addr[0]),addr)
            file_out=open("./ip.txt",'a')
            file_out.write('[%s]   %s  %s\n' %(timestr,data,addr[0]))
            print '...received from and retuned to:',addr
            file_out.close();
    finally:        
        udpsock.close()
 
udpServer()




你可能感兴趣的:(python & udp做简单的消息传递)