免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9751 | 回复: 12
打印 上一主题 下一主题

Python网络编程遇到一个问题,请教高手解决 [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-02 15:15 |只看该作者 |倒序浏览
1·问题描述:
    让服务器的名字不要在代码里写死,要允许用户指定一个主机名和端口,只有在两个值都没有输入的时候,才使用默认值。
2·脚本如下:
  1. #!/usr/bin/python

  2. from socket import *

  3. HOST = raw_input('please IP address: ')
  4. PORT = input('please PORT: ')
  5. BUFSIZ = 1024
  6. ADDR = (HOST, PORT)
  7. tcpCliSock = socket(AF_INET, SOCK_STREAM)
  8. tcpCliSock.connect(ADDR)
  9. while True:
  10.     data = raw_input('> ')
  11.     if not data:
  12.         break
  13.     tcpCliSock.send(data)
  14.     data = tcpCliSock.recv(BUFSIZ)
  15.     if not data:
  16.         break
  17.     print data
  18. tcpCliSock.close()
复制代码
3·我的问题:
    不输入PORT值,程序报错;ADDR不能像函数那样传参。

论坛徽章:
0
2 [报告]
发表于 2010-11-02 15:24 |只看该作者
回复 1# ning_lianjie


  貌似你HOST和PORT都没有指定默认值?

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
3 [报告]
发表于 2010-11-02 15:56 |只看该作者
回复 2# donotblock


    要求用户输入的,要如何指定呢?

论坛徽章:
0
4 [报告]
发表于 2010-11-02 16:02 |只看该作者
回复  donotblock


    要求用户输入的,要如何指定呢?
ning_lianjie 发表于 2010-11-02 15:56



    ADDR = (HOST and HOST or '127.0.0.1', PORT and PORT or '80')

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
5 [报告]
发表于 2010-11-02 16:07 |只看该作者
回复 4# donotblock


    果然可以,谢谢。以前在定义函数的默认参数的时候,直接可以PORT=80,没想到元组中定义还需要这样。。。

不过现在还存在一个问题,就是定义PORT=input(),如果值为空,就会报错,解决这个问题,该从何处着手?

论坛徽章:
0
6 [报告]
发表于 2010-11-02 16:11 |只看该作者
回复  donotblock


    果然可以,谢谢。以前在定义函数的默认参数的时候,直接可以PORT=80,没想到元 ...
ning_lianjie 发表于 2010-11-02 16:07



    PORT = input("abc:") 如果不输入直接敲回车,PORT就是空字符串啊。 你报什么错?

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
7 [报告]
发表于 2010-11-02 16:15 |只看该作者
回复 6# donotblock
  1. [root@ora01 16]# ./tsTclnt.py
  2. please IP address:
  3. please PORT:
  4. Traceback (most recent call last):
  5.   File "./tsTclnt.py", line 6, in ?
  6.     PORT = input('please PORT: ')
  7.   File "<string>", line 0
  8.    
  9.     ^
  10. SyntaxError: unexpected EOF while parsing
复制代码
这样,而且我在交互模式下,也一样:
  1. >>> PORT = input('please PORT: ')
  2. please PORT:
  3. Traceback (most recent call last):
  4.   File "<stdin>", line 1, in ?
  5.   File "<string>", line 0
  6.    
  7.     ^
  8. SyntaxError: unexpected EOF while parsing
复制代码

论坛徽章:
0
8 [报告]
发表于 2010-11-02 16:22 |只看该作者
回复  donotblock 这样,而且我在交互模式下,也一样:
ning_lianjie 发表于 2010-11-02 16:15



     输入的Ctrl+D还是回车? 用raw_input试试

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
9 [报告]
发表于 2010-11-02 16:26 |只看该作者
回复 8# donotblock


    直接回车,然后报错。如果用raw_input(),得到的结果就是空字符,就不是数字类型了。
  1. >>> PORT = raw_input('please PORT: ')
  2. please PORT:
  3. >>> PORT
  4. ''
复制代码

论坛徽章:
0
10 [报告]
发表于 2010-11-02 16:34 |只看该作者
回复  donotblock


    直接回车,然后报错。如果用raw_input(),得到的结果就是空字符,就不是数字类 ...
ning_lianjie 发表于 2010-11-02 16:26


我用的是python 3.12, input可以接受回车, 看了下文档,其实就相当于2.x版本的raw_input。  2.6下面只能用raw_input了,结果转换下:

ADDR = (....., PORT and int(PORT) or 80)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP