1、socket.error[10054],对方强制关闭了连接
在用socket.recvfrom时,若事先没有bind时,
先使用socket.sendto,socket.recvfrom
有时会出现socket.error[10054]
原因是因为没有开启接收sendto的服务端
若发送的ADDR是与client在同一网段,不会出现这种问题
但是在中间隔了NAT
猜测:在NAT后,socket.recvrfrom时,由于NAT的原因,若没有事先收到回复包,没有打洞,外面的包进不到NAT内部
路由收到后,所以socket.recvrfrom时就会出错,因为收不到包
2、python 对象的复制
相当于c++的引用
要复制的话最好用copy
3、dict的哈希问题
定义了一个dict={}的全局变量
在func1()中引入dict,并对dict进行了初始化
dict={'1':{{"upRecvTime":0,"downRecvTime":0,"upSendTime":0,"downSendTime":0}},2:{{"upRecvTime":0,"downRecvTime":0,"upSendTime":0,"downSendTime":0}}}
在func2()中引入dict,对dict赋值
dict['1']['upRecvTime']=10
结果dict={'1':{{"upRecvTime":10,"downRecvTime":0,"upSendTime":0,"downSendTime":0}},2:{{"upRecvTime":10,"downRecvTime":0,"upSendTime":0,"downSendTime":0}}}
每个包含"upRecvTime"的value都等于10
猜测:是python对key的哈希出现了问题
把dict={'1':{{"upRecvTime1":0,"downRecvTime1":0,"upSendTime1":0,"downSendTime1":0}},2:{{"upRecvTime2":0,"downRecvTime2":0,"upSendTime2":0,"downSendTime2":0}}}
在赋值的时候就不会出现问题了
备注:但是不使用全局变量,或是在shell中对二级有相同key的,进行复制时,不会出现问题