我的代码有问题。我试图在Python 3.0中创建一个简单的聊天室。我创建了两个名为 client.py 和 server.py
的文件这就是服务器的样子:
import socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversocket.bind(('localhost', 8123))
serversocket.listen()
def server(clientsocket):
rd= clientsocket.recv(512)
clientsocket.send(b'Hello' +rd)
data= str(rd)
print('sending:' +str(data))
print('from connected user:' +str(data))
if not data:
break
else:
clientsocket.close
while True:
(clientsocket, address) = serversocket.accept()
print("New connection from: %s:%d" % address)
conn = socket
rd = clientsocket.recv(512)
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
serversocket.listen()
conn.send(data.encode())
if output.strip()=="disconnected":
conn.close()
在此代码中,我有3个错误。首先是"如果不是数据:休息。我得到了IndentationError: unindent does not match any outer indentation level
。我不知道这到底意味着什么。
然后底部有conn.send(data.encode())
。我收到的错误如下所示:IndentationError: unexpected indent
最后一个错误是if output.strip()=="disconnected":
。 IndentationError: unexpected indent
我的 client.py 文件如下所示:
import socket
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
clientsocket.connect(('localhost', 8123))
message= input('New message')
while message!='q':
clientsocket.send(message.encode())
data = clientsocket.recv(512).decode()
print('New message from:' + data)
message = input("New message")
clientsocket.close()
payload = input()
clientsocket.payload.endode("UTF-8")
clientsocket.send(payload).decode()
print("Sends: " + payload)
reply = clientsocket.recv(512)
print("Received: " + reply)
Client.py可以正常工作,但是我打印一个编写邮件的人的姓名时遇到问题。我希望你知道我的意思。
我的最后一个问题是我的服务器没有任何循环所以在2条消息之后程序崩溃。
我是编程新手,对不起,如果我做错了什么。我是编程和StackOverflow的新手,我希望你能帮我解决我的代码。
答案 0 :(得分:1)
server.py 上的所有错误都是因为您没有正确地缩进代码。 (正如错误告诉你的那样)。
在Python中,你必须尊重行开头的空格数,才能使代码正确执行。
这是你的
if not data:
break
前面有3个空格而不是4个,这就是你得到错误的原因。
然后
conn.send(data.encode())
if output.strip()=="disconnected":
conn.close()
在他们不应该缩进的时候缩进。删除它之前的空格,(或者在代码应该执行的情况下正确缩进代码之前的代码)。