Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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 Windows select()仅接收,不发送_Python_Linux_Windows_Sockets - Fatal编程技术网

Python Windows select()仅接收,不发送

Python Windows select()仅接收,不发送,python,linux,windows,sockets,Python,Linux,Windows,Sockets,我让我的Windows计算机连接到我的linux python服务器 该服务器对于linux用户运行得非常好,但我希望它也能在Windows上运行。我做了一些研究,发现Windows上的select.select函数在没有标准输入管道的情况下工作,但当我这样做时,它不会向服务器发送任何数据,只接收数据 代码: 您知道如何在Windows中同时进行接收和发送吗?不要将套接字设置为非阻塞,除非您确实想多路传输来自不同来源的事件,即不使用select时 这里只需要普通的阻塞sendall就可以了。还要

我让我的Windows计算机连接到我的linux python服务器

该服务器对于linux用户运行得非常好,但我希望它也能在Windows上运行。我做了一些研究,发现Windows上的select.select函数在没有标准输入管道的情况下工作,但当我这样做时,它不会向服务器发送任何数据,只接收数据

代码:


您知道如何在Windows中同时进行接收和发送吗?

不要将套接字设置为非阻塞,除非您确实想多路传输来自不同来源的事件,即不使用select时

这里只需要普通的阻塞sendall就可以了。还要检查recv的返回长度——当某些数据可用时,它返回,接收到零字节意味着另一端关闭了连接

同样,不要在客户端TCP套接字上绑定或设置SO_REUSEADDR

socket_list = [sys.stdin, sock]
假设上面的套接字列表的目的是将其传递到选择。。。这是行不通的。select的Windows实现仅适用于套接字,sys.stdin不是套接字

这个问题没有简单的解决办法;也就是说,解决问题的一种方法是在一个单独的线程中读取sys.stdin,并让该线程将数据发送到连接的套接字对的一端,然后将套接字对的另一端放入要传递选择的列表中。或者,您可以在select中设置一个超时,以便select每隔一段时间返回一次,让您的偶数循环查看stdin上是否有可用的字节,尽管这种机制可能会导致CPU效率低下或延迟很高,根据您传递给选择的超时值-这是否可接受将取决于您的特定使用场景


*好的,有一个简单的解决方法:不用费心在Windows中运行程序

select本身不发送任何内容。你是说你没有写事件?同样,发布显示问题的代码是最好的选择。事实上,我在windows中没有客户端代码。我基本上想让客户端能够接收和发送到服务器。。无论如何。在python中,它使用简单的select—可写时写入,可读时读取。我正在寻找一种在windows中实现它的方法,到目前为止,我一次只能实现一个,不能同时实现两个。尝试了python socket.sendall函数?老实说,我没有,现在尝试了-引发了一个错误:非阻塞套接字操作无法立即完成。你介意举个例子吗?非常感谢你的帮助!你介意展示你的代码吗?我们这里不是免费的导师,你应该做你自己的工作:
socket_list = [sys.stdin, sock]