我正在尝试将Node.js与Python结合起来创建套接字连接。
问题是我可以发送数据,但我无法保持连接。
这是我在Node.js中的服务器
var net = require('net');
var HOST = '127.0.0.1';
var PORT = 1337;
net.createServer(function(sock) {
console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);
sock.on('data', function(data) {
console.log('DATA ' + sock.remoteAddress + ': ' + data);
sock.write('You said "' + data + '"');
});
sock.on('close', function(data) {
console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort);
});
}).listen(PORT, HOST);
console.log('Server listening on ' + HOST +':'+ PORT);
这是我在Python中的客户端
import socket
import sys
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect the socket to the port where the server is listening
server_address = ('localhost', 1337)
print >>sys.stderr, 'connecting to %s port %s' % server_address
sock.connect(server_address)
try:
# Send data
message = 'This is the message.'
print >>sys.stderr, 'sending "%s"' % message
sock.sendall(message)
finally:
print >>sys.stderr, 'closing socket'
这很有效,但客户端在发送数据后立即断开连接。
最终,我希望能够为用户输入发送数据,并接收数据。
有关如何执行此操作的任何建议将不胜感激。
答案 0 :(得分:0)
我将接近用户输入方案。截至目前,您的程序只是运行并存在。
您希望能够组合两个天真的阻塞操作,运行某种输入循环(例如while True: data = input()
),但也可以处理传入的流量。
执行此操作的基本方法是拥有2个线程,一个用于用户输入,另一个用于类似while True: data = socket.recv(buff)
循环中的套接字连接,但此处还有另一个问题,因为您可能阻止单个连接 - 您必须为每个连接专用一个线程。为了避免这种情况,您可以使用select,它可以异步维护套接字连接。
如果没有用户输入,那么您可以使用select
- 这将足以以简洁的方式处理多个连接。