找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2178|回复: 1

[求助] python网络编程中第二章例子2-1,使用自环接口的UDP服务器....

1

主题

2

帖子

2

积分

贫民

积分
2
python_li 发表于 2018-5-15 12:39:17 | 显示全部楼层 |阅读模式
最近学习python,在《python网络编程》这本书中第二章2-1例子:使用自环接口的UDP服务器和客户端有点困惑
  1. #!/usr/bin/env python3
  2. # Foundations of Python Network Programming,Third Edition
  3. # UDP client and server on localhost

  4. import argparse,socket
  5. from datetime import datetime

  6. MAX_BYTES = 65535

  7. def server(port):
  8.         sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  9.         sock.bind(('127.0.0.11',port))
  10.         print('Listening at {}',format((sock.getsockname())))
  11.         while True:
  12.                 data,address = sock.recvfrom(MAX_BYTES)
  13.                 text = data.decode('ascii')
  14.                 print('The client at {} says {!r}'.format(address,text))
  15.                 text = 'Your data was {} bytes long '.format(len(data))
  16.                 data = text.encode('ascii')
  17.                 sock.sendto(data,address)

  18.                
  19. def dlient(port):
  20.         sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  21.         text = 'The time is {}'.format(datetime.now())
  22.         data = text.encode('ascii')
  23.         sock.sendto('127.0.0.1',port)
  24.         print('The os assigned me the address {}'.format(sock.getsockname()))
  25.         data,address = sock.recvfrom(MAX_BYTES)#Danger!
  26.         text = data.decode('ascii')
  27.         print('The server {} replied (!r)'.format(address,port))


  28.        
  29.        
  30.         if __name__ == '__main__':
  31.                 choices = {'client': client ,'server': server}  #
  32.                 parser = argparse.ArgumentParser(description ='Send and receive UDP locally')
  33.                 parser.add_argument('role',choices=choices,help ='Which role to play')
  34.                 parser.add_argument('-p',metavar='port',type=int , default=1060,help = 'UDP port (default 1060)')
  35.                 args= parser.parse_args()
  36.                 function = choices[args.role]
  37.                 function(args.p)
复制代码
提示D:\py\python_test\UDP_CS>python udp_local.py client
Traceback (most recent call last):
  File "udp_local.py", line 34, in <module>
    choices = {'client':client, 'server':server}
NameError: name 'client' is not defined

但是一直没找到原因 ,书上的例子中并没有对字典中的键值进行定义。如果把值得类型改为str的在functin(args.p)中会提示无法调用str类型,请问是代码有缺漏还是缩进哪里有不对。
回复

使用道具 举报

1

主题

2

帖子

2

积分

贫民

积分
2
python_li  楼主| 发表于 2018-5-15 15:51:22 | 显示全部楼层
好了 我山炮了。定义的函数居然写错成dlient
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表