【问题标题】:Network programming with Python - TCP client/server使用 Python 进行网络编程 - TCP 客户端/服务器
【发布时间】:2014-11-26 08:22:43
【问题描述】:

我目前正在学习使用 Python 进行联网,并创建了一个简单的 TCP 服务器和客户端。客户端和服务器连接得很好,但是,当我运行客户端脚本并从提示输入一些内容时,我输入的输入出现 NameError 异常。这不应该是这种情况,因为输入应该由标识符 (data) 引用。

我浏览了代码,但似乎找不到问题所在。请参阅下面的客户端和服务器代码:

客户端脚本:

#!/usr/bin/env python
from socket import *
from time import ctime

HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)

while True:
    data = input('> ')
    if not data:break
    tcpCliSock.send(data)
    data = tcpCliSock.recv(BUFSIZ)
    if not data:break
    print(data.decode('utf-8'))
tcpCliSock.close()

服务器脚本:

from socket import *    
from time import ctime

HOST = ""
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

while True:
    print("waiting for a connection.....")
    tcpCliSock, addr= tcpSerSock.accept()
    print("....connected from:", addr)

    while True:
        data = tcpCliSock.recv(BUFSIZ)
        if not data:break
        tcpCliSock.send(bytes('[%s] %s' % (ctime(), 'utf-8'), data))
    tcpCliSock.close()
tcpSerSock.close()

非常感谢!

【问题讨论】:

  • 在您的客户端脚本中尝试使用 data = raw_input('>') 而不是 input('>') ..
  • 您的代码似乎是正确的,因此请显示整个错误消息,否则我们很难找出问题所在

标签: python tcp network-programming client-server


【解决方案1】:

您在客户端脚本中使用的 input 内置函数将用户的输入评估为 Python 代码(这是生成 NameError 的原因)。请改用raw_input 来简单地从用户那里获取文本输入。

【讨论】:

  • printinputbytes 语法可能是用户的示例是针对Python 3,但如果得到NameError,则在Python 2 上运行它。在 Python 3 中,raw_input 不存在,input 是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 2019-08-15
相关资源
最近更新 更多