紧急!错误:此套接字已由另一方结束

时间:2017-05-05 03:10:56

标签: node.js sockets appium

我修改了appium源代码,添加了我的代码,当我连接到转发到设备的端口并将命令发送到端口时,它出来了:

Error: This socket has been ended by the other party

我的代码是这样的:

return await new Promise((resolve, reject) => {
            try {
                this.socketClient = net.connect(this.webSocket);
                // Windows: the socket errors out when ADB restarts. Let's catch it to avoid crashing.
                this.socketClient.on('error', (err) => {
                    if (!this.ignoreUnexpectedShutdown) {
                        //throw new Error(`Android bootstrap socket crashed: ${err}`);
                        log.debug('//////////////////////////////////')
                        log.debug(err)
                        log.debug('//////////////////////////////////')
                        throw new Error(`Android testbundle socket crashed: ${err}`)
                    }
                });
                this.socketClient.once('connect', () => {
                    log.info("Android bundle socket is now connected");
                    resolve();
                });
            } catch (err) {
                reject(err);
            }
        })

之后,我使用this.socketClient发送如下命令:

async sendCommand(type, extra = {}) {
        if (!this.socketClient) {
            log.debug('==========socket closed========')
            throw new Error('Socket connection closed unexpectedly');
        }
        return await new B((resolve, reject) => {
            let cmd = Object.assign({cmd: type}, extra);
            let cmdJson = `${JSON.stringify(cmd)}\n`;
            log.debug(`Sending command to android testbundle: ${_.trunc(cmdJson, 1000).trim()}`);

            this.socketClient.write(cmdJson);
            this.socketClient.setEncoding('utf8');

            let streamData = '';
            this.socketClient.on('data', (data) => {
                try {
                    streamData = JSON.parse(streamData + data);
                    // we successfully parsed JSON so we've got all the data,
                    // remove the socket listener and evaluate
                    this.socketClient.removeAllListeners('data');
                    if (streamData.status === 0) {
                        resolve(streamData.value);
                    }
                    log.debug("Received command result from bundle:" + JSON.stringify(streamData));
                    reject(errorFromCode(streamData.status));
                } catch (ign) {
                    log.debug("Stream still not complete, waiting");
                    streamData += data;
                }
            })
        })

    }

但是,我总是得到错误:

[debug] [bundle] //////////////////////////////////
[debug] [bundle] Error: This socket has been ended by the other party
    at Socket.writeAfterFIN [as write] (net.js:291:12)
    at ..\../lib/bundle.js:160:31

任何人都可以帮助我...

0 个答案:

没有答案