Python套接字在一个连接/命令后关闭

2024-04-26 18:02:09 发布

您现在位置:Python中文网/ 问答频道 /正文

客户端和服务器可以成功连接,但是只能发出一个命令。在这方面已经有一段时间了,需要一些外部帮助,任何反馈或建议的改进都将是非常感谢提前。在

我一直在看其他帖子,这些帖子暗示我可能已经过早地关闭了连接,但我不相信这是真的,因为程序没有抛出任何断开错误,尽管我可能是错的。在

客户端.py

import socket
import sys
import os

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

##server = input("Enter server IP: ")
##print(server)
##
##port = int(input("Enter port: "))
##print(port)

def send_msg(msg):
    sock.sendall(msg.encode())

def get_msg():
    msg = sock.recv(2048).decode()
    return msg

server = "127.0.0.1"
port = 100

sock.connect((server, port))
print("Connecting to " + server + " on port " + str(port) + "\n")

while True:
    #Send data
    msg = input(os.getcwd() + "> ")
    print("Sending '" + msg + "'")
    send_msg(msg)

    #Response
    #amnt_exp = len(msg)
    #data = sock.recv(2048)
    data = get_msg()

    if data == "exit":
        print("\nClosing connection")
        sock.close()
    else:
        print("Received: \n" + data)

服务器.py

^{pr2}$

Tags: pyimportip服务器客户端inputdataserver
1条回答
网友
1楼 · 发布于 2024-04-26 18:02:09

问题是您的服务器循环只接受一个命令,然后它返回到accept一个全新的连接,而不再查看旧的连接。在

您的输出很容易引起误解,因为它确实打印出Waiting for a command...。但这只是因为在send_msg之前有一个额外的print("\nWaiting for a command..."),而在sock.accept之前没有任何输出。如果你的指纹准确,你就能看到实际发生了什么。例如:

sock.listen(1)
while True:
    print('Waiting for a connection...') # inside the loop, not before it
    conn, caddr = sock.accept()
    # ... etc. ...
    print("Sending reply...")
    # Don't print Waiting for a command here, because you aren't
    send_msg(msg)
    # And print something after the send succeeds
    print("Sent")
    print()

那么,现在你知道出了什么问题了,你怎么解决它?在

简单。我们只需要一个嵌套循环。一旦您accept一个客户端连接,请继续使用该连接,直到它们退出:

^{pr2}$

相关问题 更多 >