2013-12-20 66 views
0

我是一個python(3)begginer,我想做一個n球員的遊戲。這些玩家將連接到服務器進行遊戲。我正在用我找到的一個簡單示例進行練習,但是當我運行它時,它會引發錯誤「Traceback(最近調用最後一個)」和另一個「OS [WinError 10048]」,任何人都知道爲什麼?你能否解釋我如何在我的電腦中試用它,既是客戶端又是服務器?n球員遊戲的Python套接字

import socket 

#Server 

s = socket.socket() 
s.bind((socket.gethostname(), 9999)) 
s.listen(1) 

sc, addr = s.accept() 

while True: 
    received = sc.recv(1024) 
    if received == "quit": 
     break  
    print ("Received:", received) 
    sc.send(received) 

print ("bye") 

sc.close() 
s.close() 

#Client 

s = socket.socket() 
s.connect((socket.gethostname(), 9999)) 

while True: 
    message = input("> ") 
    s.send(message) 
    if message == "quit": 
     break 
print ("bye") 

s.close() 

我以前讀過它可能是防火牆的問題,但那不是我的情況。 感謝您給我帶來的任何幫助!

+0

後整個錯誤跟蹤,請。 –

+4

請發佈完整的追蹤...這是在客戶端?或服務器? (注意你不應該把客戶端和服務器放在同一個文件中,你想運行一個或另一個) –

+0

就像Joran提到的那樣,程序(一旦你得到它的工作)就會掛在accept()調用上。必須讓客戶端成爲一個單獨的程序 –

回答

2

保存在同一目錄下的文件和開放的2號航站樓有

運行server.py第一(它應該只是等待連接) (如果你已經有server.py某處運行,這將導致誤差,server.py只有一個實例可以在給定計算機/端口上同時)

然後運行client.py(而server.py在第一終端中運行)

client.py運行
import socket 
s = socket.socket() 
s.connect((socket.gethostname(), 9999)) 

while True: 
    message = input("> ") 
    s.send(message) 
    if message == "quit": 
     break 
print ("bye") 

s.close() 

server.py

import socket 

#Server 

s = socket.socket() 
s.bind((socket.gethostname(), 9999)) 
s.listen(1) 

sc, addr = s.accept() 

while True: 
    received = sc.recv(1024) 
    if received == "quit": 
     break  
    print ("Received:", received) 
    sc.send(received) 

print ("bye") 

sc.close() 
s.close()