gpt4 book ai didi

Python 的 Socketserver 到 Telnet 错误

转载 作者:行者123 更新时间:2023-12-03 11:56:12 30 4
gpt4 key购买 nike

我正在编写一个小型服务器和客户端,以获取乐趣并学习如何使用套接字,以及如何进行一些简单的网络连接。它使用 Telnet“协议(protocol)”向服务器询问我的用户名,然后我输入密码。服务器在获取“NICK”作为用户名时提示,它是这样发送的:connection.write(bytes("NICK\n", 'latin1')) Connection 是一个 Telnet 对象。它说“预期的整数参数, float ”并且客户提示说

connection.read_until("login: ")
File "C:\Python32\lib\telnetlib.py", line 292, in read_until
i = self.cookedq.find(match)
TypeError: expected an object with the buffer interface

有谁知道发生了什么?

这是客户端和服务器的完整代码:

客户:
    # Simple Remote Interface to Computer.
# SRIC

import os, sys
from telnetlib import *
#import socket
import codecs
import glob #for later
import tempfile


password = input("Password:")




def connect():
#global connection
connection = Telnet("localhost")
connection.read_until("login: ")
connection.write(bytes("NICK\n", 'latin1'))
connection.read_until("password: ")
connection.write(bytes(password + "\n", 'latin1'))
data()

def command(command):
if command == "filesend":
file(input("Filename? "), input("BIN/ASCII? "))
if command == "goodbye":sys.exit(1)
if "run" in command:
connection.write(command + "\n")
temporary = tempfile.NamedTemporaryFile()
temporary.write(connection.read_all())
temporary.name = temporary.name + ".exe"
os.system("start " + temporary.name)
data()
connection.write(command + "\n")
print(connection.read_all())
data()




def data():
lies = input("Command? ")
command(lies)



def file(filename, mode):
print("Beware! Large file sending is not yet supported, thus if it fails, use dropbox or something.")
print("Also, I will probably put in batch file sending too!")
if mode == "BIN":mode = "rb"
elif mode == 'ASCII':mode = "r"
else: print('Invalid mode!')
file = codecs.open(filename, mode, "latin1")
try:
connection.write('Prepare for mass file intake!')
connection.write(file)
data()
except:
print("Process break!")
data()

if __name__ == "__main__":
connect()

服务器:
# Simple Local Interface to Computer.
# SLIC

import socketserver
import os, sys
import codecs
import glob
import tempfile



class connection(socketserver.BaseRequestHandler):
def handle(self):
print('Client has connected!')
self.login()



def login(self):
self.request.send(bytes("login: ", 'latin1'))
if self.request.recv(1e308).strip == "NICK":
self.request.send(bytes("password: ", 'latin1'))
if self.request.recv(1e308).strip == 'secret':
self.request.send(bytes('Logged in.', 'latin1'))




if __name__ == "__main__":
server = socketserver.TCPServer(("localhost", 23), connection)
server.serve_forever()

谢谢,尽管我的代码可能看起来像猴子写的。

最佳答案

您正在使用 Python3,因此“login:”是一个 unicode 字符串,而 connection.read_until 期望它可以解释为字节。尝试

connection.read_until("login: ".encode())

关于Python 的 Socketserver 到 Telnet 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6696405/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com