我正在學習Python中的套接字,並且我在一臺機器上編寫了一個簡短的服務器套接字程序,可以使用telnet xxx.xxx.xxx.xxx 8888
進行輪詢。溝通工作正常,但由於某種原因,當我正在評估從客戶端發送的data
時,它似乎沒有像應該那樣評估。使用if語句評估的Python套接字數據行爲意外
有問題的代碼如下:
data = conn.recv(1024) # receive data
conn.sendall(data) # reply to confirm what data was received
if data == "green":
reply = 'GREEN ON'
elif data == "red":
reply = 'RED ON'
else:
reply = 'Command not recognized'
conn.sendall(reply)
從客戶端我做到以下幾點:
telnet 192.168.0.8 8888
Trying 192.168.0.8...
Connected to 192.168.0.8.
Escape character is '^]'.
Welcome to the server. Type something and hit enter # server responds with connection confirmation
green #typed from client
green #server responds with the data it received
Command not recognized #<-- data is not evaluated correctly in if statement
所以發生的是我查詢使用telnet
的服務器,它具有指示Welcome to the server...
響應連接成功。然後我輸入,服務器用它收到的數據作出響應(即因此是同一行兩次),但隨後告訴我該命令未被識別,意味着服務器程序上的if
語句沒有正確評估data
。
我是否缺少一些東西,比如數據實際上是空終止的,如green\0
導致if
塊中的錯誤評估?
感謝您的回覆。我改變了那行代碼來讀取'if data =='green \ n「'但仍然是相同的。 – nagyben
@exantas:放入一個'print(repr(data))'語句來查看你實際接收到的內容。我會是'\ r \ n'與'\ n'問題,但實際上,沒有理由繼續猜測。 – abarnert
你說得對,它確實收到了'green \ r \ n'。這是一個很好的提示,謝謝! – nagyben