【发布时间】:2015-12-28 03:32:52
【问题描述】:
我在使用 nodejs 中的 net 模块设置一个简单的服务器时遇到问题,该模块在连接后保持每个 tcp 套接字打开,从套接字读取数据并在每行文本之后回复/写回套接字数据收到。
我正在接收所有数据线/块/请求,并且对于每一个,我都会将响应字符串写入套接字。但是,客户只收到了部分书面回复。
以下是我的服务器简化代码:
net = require('net')
server = net.createServer()
nl = String.fromCharCode(10)
server.on('connection', (socket) ->
console.log('net server connection')
handle = (data, next) ->
if data.toString().indexOf('@COMMAND;') > -1
console.log("sending: #{"@NONE\n"}")
socket.write("@NONE#{nl}", next)
else
console.log("sending: MF;OK;9999-9999")
socket.write("MF;OK;9999-9999#{nl}", next)
socket.on('end', () ->
console.log('client disconnected')
)
socket.on('data', (data) ->
console.log("recieved: #{data}")
console.log("pausing")
socket.pause()
handle(data, () ->
socket.resume()
console.log("resuming")
)
)
socket.on('error', (err) ->
winston.error("socket error: ", err)
)
)
server.on('listening', () -> console.log('net server listening'))
server.on('error', (err) -> console.log('net server error', err))
server.on('close', (err) -> console.log('net server close'))
server.listen(8888)
我无法控制但经过测试可以正常工作的客户端。
这是所需的输出:
TX: @TR;MF;1234;3;1;1;999999;12345;#
RX: MF;OK;9999-9999
TX: @TR;MF;1235;2;1;11111;22222;33333;44444;1;2;13579;30.23;1090.23;0;1;12345;#
RX: MF;OK;9999-9999
TX: @COMMAND;12345
RX: @NONE
这是实际的输出:(您会注意到缺少第 4 行)。
TX: @TR;MF;1234;3;1;1;999999;12345;#
RX: MF;OK;9999-9999
TX: @TR;MF;1235;2;1;11111;22222;33333;44444;1;2;13579;30.23;1090.23;0;1;12345;#
TX: @COMMAND;12345
RX: @NONE
这是终端中的 console.log 输出:
net server connection
recieved: @TR;MF;1234;3;1;1;999999;12345;#
pausing
sending: MF;OK;9999-9999
resuming
recieved: @TR;MF;1235;2;1;11111;22222;33333;44444;1;2;13579;30.23;1090.23;0;1;12345;#
pausing
sending: MF;OK;9999-9999
resuming
recieved: @COMMAND;12345
pausing
sending: @NONE
我哪里错了!?提前致谢
【问题讨论】:
-
这是 Coffeescript 吗?如果是这样,你应该在你的问题中说/添加一个标签。
标签: node.js sockets tcp coffeescript stream