2014-10-01 209 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