Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将两个套接字连接在一起而不写入字节代码?_Python_Sockets - Fatal编程技术网

Python 将两个套接字连接在一起而不写入字节代码?

Python 将两个套接字连接在一起而不写入字节代码?,python,sockets,Python,Sockets,在Python中,是否可以在不编写字节代码的情况下将两个套接字连接在一起 例如,我想编写一个与用户交互的程序(请求/响应格式),然后执行到另一个主机的TCP连接,然后将其交给STDIN/STDOUT套接字 因此,在STDIN上接收到的任何数据都将通过TCP套接字发送,从TCP套接字接收到的任何数据都将被发送到STDOUT——同时、即时地发送,而不会被任何一方阻塞 推荐的方法是什么?如果可能的话,我希望避免编写大量套接字代码,让它“正常工作”。编辑:我的第一篇文章没有回答op的要求。大幅修订 ""

在Python中,是否可以在不编写字节代码的情况下将两个套接字连接在一起

例如,我想编写一个与用户交互的程序(请求/响应格式),然后执行到另一个主机的TCP连接,然后将其交给STDIN/STDOUT套接字

因此,在STDIN上接收到的任何数据都将通过TCP套接字发送,从TCP套接字接收到的任何数据都将被发送到STDOUT——同时、即时地发送,而不会被任何一方阻塞


推荐的方法是什么?如果可能的话,我希望避免编写大量套接字代码,让它“正常工作”。

编辑:我的第一篇文章没有回答op的要求。大幅修订

"""
open another terminal and run
nc -l 8080
type something in the both terminals>
"""
import sys
from socket import socket, AF_INET, SOCK_STREAM
from select import select

host = 'localhost'
port = 8080

sock = socket(AF_INET, SOCK_STREAM)
sock.connect((host, port))
reader = sock.makefile('r', 0)
writer = sock.makefile('w', 0)
while True:
    ins, _, _ = select([reader, sys.stdin],[],[])
    for i in ins:
        if i == reader:
            sys.stdout.write(i.read(1))
        if i == sys.stdin:
            writer.write(sys.stdin.read(1))

这个问题似乎离题了,因为我希望我自己的软件也能“正常工作”,但它从未发生过。这不是离题。我想知道最少要编写的代码集是什么,它可以毫无问题地执行该功能,这就是我所说的“只工作”的意思。@MartinJames:问题是一个常见的形式,“X是否提供了一种方法来完成Y,而不是我已经想到的“明显的”但单调而困难的方法?”。请不要因为希望你想做的事情可以很容易地完成而把所有这些都结束;-)一些异步框架可能会为您将两对类似文件的对象绑定在一起(至少应该使管道更简单),但如果不是这样的话,那么(目前)没有一个明确的答案将是不容易确定的。好的,如果它没有脱离主题,那么答案是“否”,因为TCP是字节/八位字节流服务,不能传输任何大于一个字节的消息。所以,如果不是以“离题”的形式结束,我会把它作为一个由数千个问题/答案组成的dup来结束,这些问题/答案都是由于误解TCP而产生的。我认为TCP的数据是以数据包的形式到达的,所以它是一个块流?谢谢!经过一点调整,我把它合并到了我的代码中,很好:-非常感谢您的帮助哦,是的…读者/作者甚至都不是必需的。这是编辑前文章的一部分。我很高兴你让它工作了。也许现代的方法是在阻塞调用中使用threads、gevent或eventlet,而不是使用select(),目的是显示select()调用。makefile(\u0)和read(1)有意避免出于演示目的而进行缓冲,以便在输入一行时,响应将立即出现在终端中。