2014-01-12 180 views
1

我做了一個聊天程序(在這一刻只有主持人可以發送郵件):聊天程序 - 發送不起作用

服務器:

# server 
import socket 

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

host = 'localhost' 
port = 150 

server.bind((host, port)) 

print 'Server is open\nWaiting connections...' 

server.listen(1) 

while True: 
    client, addr = server.accept() 
    print 'Connected by', addr 
    while True: 

現在的問題是:當我鍵入消息我發送它們,客戶端只能看到偶數的消息。爲什麼會發生?

 msg = raw_input('>>>') 
     if msg == 'exit': 
      client.send(msg) 
      break 
     else: 
      client.send('<Host>' + msg) 
client.close() 

客戶端:

# client 
import socket 
import time 

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

host = 'localhost' 
port = 150 

client.connect((host,port)) 

while True: 
    if client.recv(1024) == 'exit': 
     print '<System>Host disconnected the Server...' 
     print '<System>Program will shoot down in 5 seconds' 
     time.sleep(5) 
     break 
    else: 
     print client.recv(1024) 
client.close() 
+1

你說的「只看到消息有偶數個」是什麼意思?我沒有看到任何涉及發送/接收郵件的號碼。此外,這似乎不是一個非常好的書面服務器/客戶端系統。如果您還沒有閱讀Beej的網絡編程指南,我建議您閱讀這個主題。 – Dries

+0

所以如果我發送第一條消息,客戶端看不到任何東西,當我發送第二條消息客戶端看到它,當我發送第三條消息時,客戶端看不到它等等...感謝閱讀建議,不是很好的寫作,因爲我在與網絡開始。 – user3144605

回答

4

請注意,您在客戶端收到消息兩次:首先,您將收到一條消息,並檢查它是否是「退出」的消息,然後消息被接收並打印。因此,只有偶數消息被打印,而奇數消息在if條件中被用完。

嘗試改變客戶端代碼如下:

while True: 
    msg = client.recv(1024) 
    if msg == 'exit': 
     print '<System>Host disconnected the Server...' 
     print '<System>Program will shut down in 5 seconds' 
     time.sleep(5) 
     break 
    else: 
     print msg 
+0

好的。我沒有看到那一個。如果我能做出那樣的話,自己可能會犯這個錯誤。 – Dries

+0

謝謝你!這是! – user3144605