【问题标题】:How do I get my socket code to send more than one line如何让我的套接字代码发送多行
【发布时间】:2021-05-22 23:04:36
【问题描述】:

我正在尝试创建一个向客户端发送手动输入命令的套接字服务器连接。

我可以向它发送 1 个命令/行,但我无法让 input() 提示我输入第二个命令然后发送它。我可以做一次,但不能做两次或更多。

我尝试给它一个 if 语句和另一个 while 循环。两者都没有产生预期的结果。

import socket
import time

inputdata = input("Enter command: ")
test_data =  bytes(inputdata, encoding='utf-8')
s = socket.socket()
s.bind(('localhost', 667))
s.listen()
while True:
    c, addr = s.accept()
    if(test_data):
            c.send(test_data)
    time.sleep(.1)

如果我将 input() 放入循环中,我的代码就会挂起。

import socket
import time

inputdata = 0
#test_data =  bytes(inputdata)
s = socket.socket()
s.bind(('localhost', 667))
s.listen()
while True:
    c, addr = s.accept()
    inputdata = input("Enter command: ")
    test_data =  bytes(inputdata)
    if(test_data):
            c.send(test_data)
    time.sleep(.1)

如何让我的代码向客户端发送超过 1 个 input() 命令行?

【问题讨论】:

  • 将信息提示放入循环中。为什么这不明显?
  • 如你所说,要重复input(),你必须把它放在一个循环中。
  • 顺便说一句,TCP 套接字没有消息边界。客户端无法知道一个命令在哪里结束,下一个命令从哪里开始。您需要实现一个应用程序协议来添加此信息。
  • @mkrieger1 如果我将 input() 放在循环中,我什至无法让它正确提示我一次。
  • @Barmar 我不知道该怎么做。

标签: python python-3.x sockets server


【解决方案1】:

accept() 不应该在循环中,因为它等待来自客户端的另一个连接。

import socket
import time

inputdata = 0
#test_data =  bytes(inputdata)
s = socket.socket()
s.bind(('localhost', 667))
s.listen()
c, addr = s.accept()
while True:
    inputdata = input("Enter command: ")
    test_data =  bytes(inputdata)
    if(test_data):
        c.send(test_data)
    time.sleep(.1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2023-04-03
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多