学习了基本的socket编程之后, 想要自己搭建一个ftp用于电脑之间的文件传输. 在尝试阅读RFC959协议被虐之后, 只能拿大神们的轮子来用, 就是这个东东pyftpdlib.
基本代码直接参考pyftpdlib文档即可, 在搭建过程中,遇到了一个小坑
关于主机IP地址的获取
方法一
import socket
def host_ip():
ip = socket.gethostbyname(socket.gethostname())
return ip
这个方法在mac上没有问题(mac貌似直接用gethostname()即可), 但是在win上(win10), 获取到的ip地址却是虚拟机的(ipconfig命令确认)
方法二
各种搜索之后, 找到了一个比较好的方法
def host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 6437))
ip = s.getsockname()[0]
finally:
s.close()
return ip
该方法生成一个UDP包, 尝试发包, 然后从中获取主机的IP地址. 没有其他依赖~~
(该方法参考来源: 东东东 陈煜东的博客)
网友评论