Code Monkey home page Code Monkey logo

zmodem's People

Contributors

xiwh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

anyliker yomaser

zmodem's Issues

大佬,OnUpload使用 io 复制时会卡住,打断点有时不卡,但是服务器文件大小0,没成功

cli, _, _ := createSShClient(c, true)
session, _ := cli.NewSession()
zmIn := byteutil.NewBlockReadWriter(-1)
zmOut := byteutil.NewBlockReadWriter(-1)
zm := zmodem.New(zmodem.ZModemConsumer{
OnUploadSkip: func(file *zmodem.ZModemFile) {},
OnUpload: func() *zmodem.ZModemFile {
loPath := "/Users/chenbo36/Downloads/test/aaa/a"

		lof, err := os.Open(loPath)
		if err != nil {
			return nil
		}
		stat, err := lof.Stat()
		if err != nil {
			return nil
		}
		zf, writer := zmodem.NewZModemFile(stat.Name(), int(stat.Size()))
		go func() {
			io.Copy(writer, lof)
		}()

		//zf, _ := zmodem.NewZModemLocalFile(loPath)

		return zf
	},
	OnCheckDownload: func(file *zmodem.ZModemFile) {},
	OnDownload: func(file *zmodem.ZModemFile, reader io.ReadCloser) (err error) {
		dir := "/Users/chenbo36/Downloads/test/aaa/"

		loPath := filepath.Join(dir, file.Filename)
		lof, err := osutil.CreateFile(loPath)
		if err != nil {
			return err
		}

		io.Copy(lof, reader)

		return err
	},
	Writer:     zmIn,
	EchoWriter: zmOut,
})

session.Stderr = zm
session.Stdin = zmIn
session.Stdout = zm
session.RequestPty("xterm-256color", 30, 100, ssh.TerminalModes{ssh.ECHO: 1, ssh.TTY_OP_ISPEED: 14400,ssh.TTY_OP_OSPEED: 115200})

session.Shell()

go func() {
	time.Sleep(1 * time.Second)
	zmIn.Write([]byte("cd /root/test\n"))
	time.Sleep(1 * time.Second)
	zmIn.Write([]byte("rz\n"))
}()

for {
	data := make([]byte, 8192, 8194)
	n, err := zmOut.Read(data)
	if err != nil {
		return
	}

	if n > 0 {
		fmt.Println(string(data[:n]))
	}

}

image

上传,下载的问题

上传时服务器如果存在相同文件会卡住, 上传中断writer正常
下载时突然中断writer, 会卡住, return err 或 return nil无法正常退出

无法响应 ctrl+c中断,会生成错误文件,该文件无法正常删除
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.