用于n-player游戏的Python套接字

时间:2013-12-20 18:11:52

标签: python sockets

我是一个蟒蛇(3)初学者,我想做一个n-player游戏。这个玩家将连接到服务器进行播放。我正在练习一个我发现的简单示例,但是当我运行它时,它会抛出错误“Traceback(最近一次调用最后一次)”和另一个“OS [WinError 10048]”,有人知道为什么吗?你能解释一下如何在我的电脑上试用它,既是客户端又是服务器?。

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()

我之前已经读过它可能是防火墙的问题,但这不是我的情况。 谢谢你能带给我的任何帮助!

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

我认为您的问题在于地址绑定。而不是 s.bind((socket.gethostname(), 9999)),它应该是 s.bind((socket.gethostname(socket.gethostbyname()), 9999))