Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Air_Stdout_Stdin - Fatal编程技术网

Python 用于本地客户机-服务器通信的套接字与标准流

Python 用于本地客户机-服务器通信的套接字与标准流,python,sockets,air,stdout,stdin,Python,Sockets,Air,Stdout,Stdin,我有一个由本地“服务器”和GUI客户端组成的应用程序。服务器是用Python编写的,而GUI是可以更改的,并且是用Flex4编写的。客户端向本地服务器查询信息并相应地显示。这两个应用程序都要在同一台计算机上运行,并且只能在本地通信。此时,客户端和Python服务器通过一个基本套接字进行通信,客户端向套接字写入请求,套接字返回一些数据 然而,由于我正在编写一个桌面应用程序,我认为维护和完善一个使用标准流而不是套接字的系统可能更容易。服务器将持续侦听raw_input(),并根据写入stdin的任何

我有一个由本地“服务器”和GUI客户端组成的应用程序。服务器是用Python编写的,而GUI是可以更改的,并且是用Flex4编写的。客户端向本地服务器查询信息并相应地显示。这两个应用程序都要在同一台计算机上运行,并且只能在本地通信。此时,客户端和Python服务器通过一个基本套接字进行通信,客户端向套接字写入请求,套接字返回一些数据

然而,由于我正在编写一个桌面应用程序,我认为维护和完善一个使用标准流而不是套接字的系统可能更容易。服务器将持续侦听
raw_input()
,并根据写入stdin的任何内容进行输出,在这种情况下,客户端将使用AIR的
NativeProcess
类来读写stdout和stdin,而不是使用套接字

客户机和服务器是独立的进程,但应该或多或少同时启动。我真的不需要复杂的网络,只需要本地跨语言交流


每种方法的优缺点是什么?与使用标准流通信相比,使用套接字会有什么好处或坏处?哪一个更有效?哪一个更容易维护?

在类似UNIX的平台上,使用stdin/stdout是一个套接字,所以没有区别。也就是说,如果您启动一个进程并重定向其stdout,那么通常会使用socketpair来完成,因此不需要创建自己的UNIX域套接字来进行通信。但是,用于处理stdin/stdout的Python类不能让您访问底层套接字的全部灵活性,因此您必须自己设置它,例如,如果您想进行半封闭式操作,我想(Python不能提供这种跨平台的功能,因为例如,Windows sys::stdin不能是套接字,也不总是在UNIX上)

本地TCP连接的好处在于它是跨平台的,并且在任何地方都提供了可预测的语义。例如,如果您希望能够关闭输出并仍然从输入读取数据,那么使用在任何地方都相同的套接字进行此类操作要简单得多。即使没有这一点,为了简单起见,使用TCP套接字始终是解决古怪的Windows命名管道混乱问题的合理方法,尽管Python很好地保护了您