【问题标题】:Why can't I send all messages with my server-client model?为什么我不能使用我的服务器-客户端模型发送所有消息?
【发布时间】:2017-02-20 20:02:02
【问题描述】:

我已经实现了一个简单的服务器-客户端模型,用于在我的 Raspberry Pi 和运行 Linux、Ubuntu 的笔记本电脑之间发送和打印消息。这是客户端代码,然后是服务器代码。

import socket

ms = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ainfo = socket.getaddrinfo("ip_address_of_RaspberryPi", 1234)
#print(ainfo)
#print(ainfo[0][4])
ms.connect(ainfo[0][4])
counter = 0
while counter <= 10:
     message = input("What do you want to send? Bear in mind that you only have 11 chances!!: ")
     print(message)
     ms.send(bytes(message,'UTF-8'))
     counter += 1
ms.close()

以及服务器代码:

import socket 

ms = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ms.bind(('',1234))
ms.listen(5)
while True:
    conn, addr = ms.accept()
    data = conn.recv(1000)
    if not data:
        break
    print(data)
conn.close()
ms.close()

我在 Raspberry Pi 上运行服务器代码,在笔记本电脑上运行客户端代码。连接成功,但服务器只打印出我发送的第一条消息,它不会打印我尝试发送的其他 10 条消息。我真的很感激任何帮助。提前致谢!

【问题讨论】:

    标签: python linux server client


    【解决方案1】:

    您需要在循环之外执行accept()

    import socket 
    
    ms = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ms.bind(('',1234))
    ms.listen(5)
    conn, addr = ms.accept()
    while True:
        data = conn.recv(1000)
        if not data:
            break
        print(data)
    conn.close()
    ms.close()
    

    accept() 等待建立新连接,但您已经有一个连接的套接字。因此,此调用将阻塞,直到您与服务器建立新连接。

    【讨论】:

    • 非常感谢您的快速回复!问题已解决,您对 accept() 的反馈很棒!
    • 不客气。不要忘记接受答案,这样每个人都可以看到您的问题已解决。
    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 2019-02-26
    相关资源
    最近更新 更多