python - 如何检查是否从客户端收到字节?

标签 python python-3.x sockets python-3.5 python-sockets

我正在创建一个聊天界面,当前,服务器必须先发送一条消息才能使聊天正常进行。

如果客户端首先发送消息,则服务器无法看到该消息,直到服务器向客户端发送消息为止。

我的问题:

  • 如何检查客户端是否向我发送了任何东西?然后,我可以简单地将其打印出来。

  • 这是服务器代码:
    
    serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serv.bind(("", 8080))
    serv.listen(5)
    while True:
        c, addr = serv.accept()
    
        print("Connection recieved from", addr)
        while True:
            strig = str(input("Enter your message to the client: "))
            c.send(strig.encode())
    
            thing = c.recv(1024)
            message = list(str(thing))
            message.remove("b")
            printable = ""
    
            for item in message:
                printable += item
            print(printable)
    
            strig = str(input("Enter your message to the client: "))
            c.send(strig.encode())
    
            thing = c.recv(1024)
            message = list(str(thing))
            message.remove("b")
            printable = ""
    
            for item in message:
                printable += item
            print(printable)
    
    

    这是客户端代码:
    from time import sleep
    s = socket.socket()
    
    port = 8080
    
    s.connect(("10.0.0.92", port))
    while True:
        thing = str(s.recv(1024))
        message = list(thing)
        message.remove("b")
        #message.remove("/")
        printable = ""
        for item in message:
            printable += item
        print(printable)
    
        your = str(input("Enter your message to the server: "))
        s.send(your.encode())
    
        thing = str(s.recv(1024))
        message = list(thing)
        message.remove("b")
        #message.remove("/")
        printable = ""
        for item in message:
            printable += item
        print(printable)
    
        your = str(input("Enter your message to the server: "))
        s.send(your.encode())
    

    提前致谢!!

    p.s.我希望一个人成为服务器,一个人成为客户端。请不要告诉我让这两个人成为客户。

    最佳答案

    您的服务器是单线程的。 input等待输入,因此在没有用户输入的情况下永远不会进入recv。创建一个线程来读取客户端输入,并创建一个线程来询问和发送消息。在客户端,您将需要类似的东西。

    关于python - 如何检查是否从客户端收到字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60907977/

    相关文章:

    python - 从 flask.ext.login 导入 LoginManager 时出现问题

    python - 为什么 python 中的函数/方法需要 self 作为参数?

    Python pip 库搜索路径

    python - 如何在 python 中反转句子的部分内容?

    python - 为 html 表提取 lxml xpath

    python - 有人知道使用 sqlite 库的 Python 开源 Web 应用程序吗?

    python - 正则表达式将一个巨大的字符串分割成多组键值对

    node.js - Socket.io 连接恢复轮询,从不触发 'connection' 处理程序

    c++ - 在 Cygwin 上使用 -std=c++11 编译会隐藏可用的系统调用

    ruby - 远程UDP套接字未接收到数据包