套接字。在python中编程聊天室

时间:2018-01-23 11:51:02

标签: python python-3.x sockets

我的代码有问题。我试图在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的新手,我希望你能帮我解决我的代码。

1 个答案:

答案 0 :(得分:1)

server.py 上的所有错误都是因为您没有正确地缩进代码。 (正如错误告诉你的那样)。

在Python中,你必须尊重行开头的空格数,才能使代码正确执行。

这是你的

   if not data:
       break

前面有3个空格而不是4个,这就是你得到错误的原因。

然后

    conn.send(data.encode())


    if output.strip()=="disconnected":
        conn.close()

在他们不应该缩进的时候缩进。删除它之前的空格,(或者在代码应该执行的情况下正确缩进代码之前的代码)。