Python socket发送问题
我现在正在写一个简单的Python脚本,这个脚本可以连接到一个IP地址和端口,然后让你执行一些命令。这个功能有点像telnet。我想让它连接到比如MySQL(只是举个例子),然后执行一些MySQL命令,就像用Telnet或NetCat那样。
但是假设我连接到一个服务后,却无法执行命令。我正在尝试连接到本地的一个自定义端口。让我给你看看代码:
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! ::
如果我输入任何东西,结果都是显示同样的横幅。无论我输入什么,都是这个横幅,一遍又一遍。
2 个回答
1
这也难怪。你在发送输入后,从来没有在通信的套接字上调用过 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)
1
你的 recvdata = sock.recv(socksize)
这行代码放在了接收循环之外。我觉得,学习一下 Python中的socket编程 会对你有帮助。你之前的问题和这个问题,如果看过那个入门教程,应该很容易就能发现了。可以看看一个示例的socket回声服务器/客户端(在这个网站上),你可以在这个基础上进行修改,继续你的任务。运行两个独立的终端,一个端口运行回声服务器,另一个端口使用回声客户端,地址指向 127.0.0.1
。