2011-08-16 42 views
1

我做了一些python脚本,并在我的计算机和一些远程shell(提供shell访问的某个网站)上运行它。奇怪的网络行为与UDP套接字和python

我使用线程,管道和UDP套接字P2P方式传输数据,因此每个脚本既可以接收和通过相同的插座发送。为了测试它是否有效,我在我的电脑和另一个终端上用ssh打开一个终端,连接到我的外壳。我确定两台机器上的脚本都是一样的,并用一个IP地址提供它。

下面是脚本:http://codepad.org/V9Q1KcDT

(我不知道我是否应该在这里直接或没有粘贴)

我的问题是这样的:字符串我发似乎降落的东西的20%时间,有时经常,有时不会,并且它似乎是随机的...

我在做什么错? UDP是否如此不可靠? python thread + pipe + socket太慢了吗? 它可能是我的shell提供商的某种网络问题吗? 我的程序有瑕疵吗? 管道是与线程通信的良好解决方案吗?

我没有问题没有使用shell,我没有尝试过,但它对测试目的很有用。

顺便说一句,如果我behing路由器,如果我不是唯一的计算机连接,路由器如何知道在哪里发送数据包? (当我是唯一一个的时候我尝试过,它的表现完全相同)。

回答

0

用户数据报协议(UDP)很容易代表不可靠的数据报协议。 UDP没有提供有关传递的保证,所以如果您需要可靠性,您必须通过重新发送消息来实现它。

也就是说,线程和多处理以及远程机器和网络是很多可以立即诊断的变量。我建议你退后一步,试着把问题简化到一些简单的问题。

例如:

  • 第一次尝试TCP,而不是代替线程UDP
  • ,运行2个过程(一个做nit_send,一个做nit_recv)
  • 你的本地计算机上运行他们两个(使用localhost:127.0.0.1

一旦你有这个基本的测试工作,然后添加功能。例如,切换到UDP。一旦你得到了你的UDP问题整理出当地尝试引进远程机器或线程等

关于路由器的问题连接到路由器的所有设备都是最有可能NAT'd所以他们似乎都具有相同的IP地址(路由器的IP地址)连接到互联网上的机器。如果要将流量路由到本地子网上的特定计算机,请查看NAT和端口转发。