2014-10-01 120 views
0

我目前正在学习使用Python进行网络连接,并创建了一个简单的TCP服务器和客户端。然而,当我运行客户端脚本并从提示符中输入内容时,客户端和服务器连接状况良好,我输入的输入信息中出现NameError异常。这不应该是这种情况,因为输入应该被标识符引用(数据)。使用Python进行网络编程 - TCP客户端/服务器

我已经通过代码,但似乎无法找到问题。请参阅下面的两个客户端和服务器代码:

客户端脚本:

#!/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() 

非常感谢!

+0

尝试data = raw_input('>')而不是输入('>')在您的客户端脚本中。 – Ram 2014-10-01 13:21:46

+0

您的代码似乎是正确的,所以显示整个错误信息或者我们很难找出什么是错误的 – laike9m 2014-10-01 13:22:48

回答

0

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

+2

从'print','input'和'bytes'语法中,用户的例子可能是Python 3,但是如果得到'NameError',则在Python 2上运行它。在Python 3中,'raw_input'不存在,'input'是正确的。 – 2014-10-04 21:28:29