【问题标题】:Python socket sending problemPython 套接字发送问题
【发布时间】:2011-07-09 06:14:59
【问题描述】:

我目前正在编写一个简单的 Python 脚本,该脚本连接到 IP/端口并允许您执行命令。有点像telnet。我希望它连接到让我们说 MySQL(只是一个例子)并像使用 Telnet 或 NetCat 一样执行 MySQL 命令。 但是假设我连接到服务,我无法执行命令。我正在尝试连接到本地主机上的自定义端口。让我展示一下代码:


try:
    sock.connect((host, port))
    recvdata = sock.recv(socksize)
    print("Type your commands now")
    while(1): #Setting a loop
        print(recvdata)
        userInput = raw_input(">")
        sock.send(userInput + '\r\n\r\n')
        print(recvdata)
except KeyboardInterrupt:
    print("\nConnection closed")
    sys.exit()
所以这就是我连接时得到的:

:: !Test service! ::
如果我输入任何内容,我就会再次获得横幅。无论如何,同样的旗帜一遍又一遍。

【问题讨论】:

    标签: python sockets service connection port


    【解决方案1】:

    您的 recvdata = sock.recv(socksize) 在 recv 循环之外。我认为,对socket programming in Python 的良好介绍可能对您有所帮助。您使用该介绍教程很容易发现您之前的问题和这个问题。查看一个示例套接字回显服务器/客户端 (at this site),您可以对其进行进一步修改并继续您的任务。运行两个单独的终端,在一端运行回显服务器并使用地址指向127.0.0.1 的回显客户端。

    【讨论】:

    • 我已经试过了。那也不行。我只是得到一堆不需要的输出。
    • 我一直在读它。我已经尝试了很多事情,例如将sock.connect() 排除在循环之外,但是当我尝试一个命令时,它第一次起作用,但第二次不起作用。我不断收到传输端点已连接错误。
    • 用小型回声服务器和客户端的示例链接更新了答案。
    【解决方案2】:

    嗯,难怪。发送输入后,您实际上从未在通信套接字上调用sock.recv。 在循环之前,recvdata 包含来自初始 connect 的“横幅”。但是一旦你进入循环,这个变量就永远不会改变。

    我相信你想要的是:

    sock.connect((host, port))
    recvdata = sock.recv(socksize)
    print(recvdata)
    print("Type your commands now")
    while(1): #Setting a loop
        userInput = raw_input(">")
        sock.send(userInput + '\r\n\r\n')
        recvdata = sock.recv(socksize)
        print(recvdata)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      相关资源
      最近更新 更多