实现通用池的NodeJS TCP客户端发送到Java TCP服务器时缺少数据

实现通用池的NodeJS TCP客户端发送到Java TCP服务器时缺少数据,java,node.js,sockets,connection-pooling,Java,Node.js,Sockets,Connection Pooling,我使用从NodeJS TCP客户端向Java TCP服务器发送数据 这是my NodeJS客户端入口点中的相关代码blockEventListener.js-完整代码: 这是blockProcessing.js-完整代码中的相关代码: EPIPE错误输出示例: !!!!!!!!!!!!! ERROR !!!!!!!!!!!!! Error: write EPIPE at afterWriteDispatched (internal/stream_base_commons.js:156:2

我使用从NodeJS TCP客户端向Java TCP服务器发送数据

这是my NodeJS客户端入口点中的相关代码
blockEventListener.js
-完整代码:

这是
blockProcessing.js
-完整代码中的相关代码:

EPIPE错误输出示例:

!!!!!!!!!!!!! ERROR !!!!!!!!!!!!!
Error: write EPIPE
    at afterWriteDispatched (internal/stream_base_commons.js:156:25)
    at writeGeneric (internal/stream_base_commons.js:147:3)
    at Socket._writeGeneric (net.js:788:11)
    at Socket._write (net.js:800:8)
    at doWrite (_stream_writable.js:403:12)
    at writeOrBuffer (_stream_writable.js:387:5)
    at Socket.Writable.write (_stream_writable.js:318:11)
    at /root/nodejslistener/accessreal/product/sdk/nodejs/blockProcessing.js:124:16
    at new Promise (<anonymous>)
    at writeToSocket (/root/nodejslistener/accessreal/product/sdk/nodejs/blockProcessing.js:109:12) {
  errno: 'EPIPE',
  code: 'EPIPE',
  syscall: 'write'
}
{
  blocknumber: '426',
  ...more details...
}
!!!!!!!!!!!!!错误!!!!!!!!!!!!!
错误:写入EPIPE
在写后发布(内部/stream_base_commons.js:156:25)
在writeGeneric(内部/stream_base_commons.js:147:3)
在插座上写下电子(net.js:788:11)
在套接字上写入(net.js:800:8)
在doWrite(_stream_writable.js:403:12)
在writeOrBuffer(_stream_writable.js:387:5)
在Socket.Writable.write(_stream_Writable.js:318:11)
at/root/nodejslistener/accessreal/product/sdk/nodejs/blockProcessing.js:124:16
在新的承诺()
在writeToSocket(/root/nodejslistener/accessreal/product/sdk/nodejs/blockProcessing.js:109:12){
errno:‘EPIPE’,
代码:“EPIPE”,
系统调用:“写入”
}
{
区块编号:“426”,
…更多细节。。。
}
关于我目前的情况,我有几个问题:

  • 当我在Java服务器中省略
    .close()
    语句时,我没有得到任何错误,但我只看到前五个数据块。后续数据似乎丢失了,但我在我的客户机中没有看到任何错误。为什么?

  • 我应该在NodeJS客户端和/或Java服务器中更改什么,以便成功发送所有数据


  • 与其使用您的客户机,我建议您使用telnet来启动您的服务器。一旦它在那里运行,然后将客户端和服务器连接在一起。@NomadMaker我不明白你的意思,你能详细说明一下吗?Telnet是一个允许你创建到internet地址的文本连接的程序。这将允许您作为客户机登录服务器,但您必须自己键入所有内容。我过去曾用它来测试服务器和客户端。
    exports.processBlockEvent = async function (channelname, block, socket, configPath) {
        return new Promise(async (resolve, reject) => {
            // some code
     
            for (var dataItem in dataArray) {
            
                // more code
                
                for (var actionItem in actions) {
                    
                    // yet more code
                    
                    for (var record in rwSet) {
                        // ignore lscc events
                        if (rwSet[record].namespace != "lscc") {
                            // create object to store properties
                            const writeObject = new Object();
                            writeObject.blocknumber = blockNumber;
                            writeObject.chaincodeid = chaincodeID;
                            writeObject.channelid = channelid;
                            writeObject.timestamp = timestamp;
                            writeObject.txnid = txnid;
                            writeObject.values = rwSet[record].rwset.writes;
     
                            writeToSocket(socket, writeObject, channelname, chaincodeID);
                        }
                    }
                }
                console.log("---------");
            }
     
            // update the nextblock.nextBlock file to retrieve the next block
            fs.writeFileSync(configPath, parseInt(blockNumber, 10) + 1);
     
            socket.write('<END>\n');
            resolve(true);
        })
    }
    
    function writeToSocket(socket, writeObject, channelname, chaincodeID) {
        return new Promise(async (resolve, reject) => {
            console.log(`ChannelID: ${writeObject.channelid}`);
            console.log(`Transaction Timestamp: ${writeObject.timestamp}`);
            console.log(`ChaincodeID: ${writeObject.chaincodeid}`);
            console.log(`TxnID: ${writeObject.txnid}`);
            console.log(writeObject.values);
     
            let objstr = JSON.stringify(writeObject);
            socket.on('error', function(ex) {
                console.log('!!!!!!!!!!!!! ERROR !!!!!!!!!!!!!');
                console.log(ex);
                console.log(writeObject);
                console.log('=================================');
            });
            socket.write(objstr);
            socket.write('\n');
     
            var outputLog = path.resolve(__dirname, folderLog, `${channelname}_${chaincodeID}.log`);
            fs.appendFileSync(outputLog, objstr + "\n");
        });
    }
    
    package demo;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class SimpleListener {
        public static void main(String[] args) throws IOException {
            ServerSocket server = new ServerSocket(Integer.parseInt(args[0]));
            int n = 0;
            while (n < Integer.parseInt(args[1])) {
                new ThreadSocket(server.accept());
                n++;
            }
            server.close();
        }
    }
    
    class ThreadSocket extends Thread{
        private Socket insocket;    
        ThreadSocket(Socket insocket){
            this.insocket = insocket;
            this.start();
        }       
        @Override
        public void run() {     
            try {
                InputStream is = insocket.getInputStream();
                InputStreamReader reader = new InputStreamReader(is);
                BufferedReader in = new BufferedReader(reader);
    
                PrintWriter out = new PrintWriter(insocket.getOutputStream(), true);
    
                StringBuilder sb = new StringBuilder();
                String line = in.readLine();
                while (line != null && !"<END>".equalsIgnoreCase(line)) {
                    sb.append(line + "\n");
                    line = in.readLine();
                }
                String output = sb.toString();
                System.out.println("INCOMING: " + output);
    
                out.println(200);
                out.close();
                in.close();
                reader.close();
                is.close();
                insocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }       
        }
    }
    
    !!!!!!!!!!!!! ERROR !!!!!!!!!!!!!
    Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed
        at doWrite (_stream_writable.js:399:19)
        at writeOrBuffer (_stream_writable.js:387:5)
        at Socket.Writable.write (_stream_writable.js:318:11)
        at /root/nodejslistener/accessreal/product/sdk/nodejs/blockProcessing.js:103:16
        at new Promise (<anonymous>)
        at Object.exports.processBlockEvent (/root/nodejslistener/accessreal/product/sdk/nodejs/blockProcessing.js:16:12)
        at Timeout._onTimeout (/root/nodejslistener/accessreal/product/sdk/nodejs/blockEventListener.js:185:39) {
      code: 'ERR_STREAM_DESTROYED'
    }
    {
      blocknumber: '427',
      ...more details...
    }
    
    !!!!!!!!!!!!! ERROR !!!!!!!!!!!!!
    Error: write EPIPE
        at afterWriteDispatched (internal/stream_base_commons.js:156:25)
        at writeGeneric (internal/stream_base_commons.js:147:3)
        at Socket._writeGeneric (net.js:788:11)
        at Socket._write (net.js:800:8)
        at doWrite (_stream_writable.js:403:12)
        at writeOrBuffer (_stream_writable.js:387:5)
        at Socket.Writable.write (_stream_writable.js:318:11)
        at /root/nodejslistener/accessreal/product/sdk/nodejs/blockProcessing.js:124:16
        at new Promise (<anonymous>)
        at writeToSocket (/root/nodejslistener/accessreal/product/sdk/nodejs/blockProcessing.js:109:12) {
      errno: 'EPIPE',
      code: 'EPIPE',
      syscall: 'write'
    }
    {
      blocknumber: '426',
      ...more details...
    }