【发布时间】:2016-01-07 23:24:44
【问题描述】:
老实说,我不知道为什么会发生这种情况,我认为由于它不在堆栈交换中,这对我来说是一个非常错误的错误。所以这是错误:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) UnboundLocalError:在赋值之前引用了局部变量“socket”
tcpServer.py
import socket
def Main():
UID = 1001
sockets = []
users = [] ## create usernames list
sessionLimit = input("session Queue Limit: ")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('192.168.1.74', 12127))
s.listen(sessionLimit) ## listen for 1 connection at a time
while True:
c, addr = s.accept()
sockets.append(c)
users.append(c.recv(1024).decode('utf-8'))
print("Connection from " + str(addr))
data = c.recv(1024).decode('utf-8') ## recieve 1024 bytes from client at a time, and then decode it into utf-8
if not data:
break
temp == data
temp.split(" ")
if temp[0] == "//": ## check to see if user has sent command
if temp[1] == "msg":
for i in range(len(users)):
if users[i] == temp[2]:
sockets[i].send((" ".join(temp[::2])).encode('utf-8'))
else: ## else, send data to all users. Could just use s.sendall(data.encode('utf-8'))
for socket in sockets:
socket.send(data.encode('utf-8')) ## send to sockets[socket]
##print("From connected user: " + data)
##data = data.upper()
##print("Sending: " + data)
##c.send(data.encode('utf-8'))
## command listening
commands = input("-> ")
commands.split(" ")
if commands[0] == "exit":
c.close() ## close connection
elif commands[0] == "/msg":
for i in range(len(users)):
if users[i] == commands[1]:
sockets[i].send((" ".join(commands[::1])).encode('utf-8'))
"""
elif commands[0] == "/rename": ## dont implement yet, due to users[] length changing
for i in range(len(users)):
if users[i] == commands[1]:
sockets[i].send("<server_" + UID + "> rename " + commands[2].encode('utf-8'))
"""
c.close()
if __name__ == "__main__":
Main()
感谢您的帮助! - 雅各布
【问题讨论】:
-
您确定您运行的版本就是您粘贴的版本吗?这个版本,当我运行它时,只是告诉我我不能绑定到那个地址(这是有道理的)但我没有得到任何 UboundLocalError。
-
在我的服务器上:3.4.3+ 在我的工作站上:3.5.1。基本代码(创建和绑定套接字)在服务器上运行完美,但是由于我添加了命令和多个用户功能,它出于某种原因不会接受; socket.socket()
-
对不起,我的意思是,你试过运行这个确切的代码吗?因为我运行的时候socket.socket()没有问题
-
我尝试运行它,代码也只给出了绑定错误,但是缩进都是错误的,因此代码无论如何都不起作用。