【发布时间】:2011-09-23 13:32:21
【问题描述】:
我是 linux 环境的新手,如有任何帮助/反馈,我们将不胜感激。我实际上正在尝试开发一个客户端-服务器(MULTICAST)程序,所以,我想测试一个客户端将信息发送到不同的服务器(一对多关系)。因此,我想在一台计算机上用不同的IP地址在linux中模拟不同的服务器端。
【问题讨论】:
标签: c linux network-programming client-server
我是 linux 环境的新手,如有任何帮助/反馈,我们将不胜感激。我实际上正在尝试开发一个客户端-服务器(MULTICAST)程序,所以,我想测试一个客户端将信息发送到不同的服务器(一对多关系)。因此,我想在一台计算机上用不同的IP地址在linux中模拟不同的服务器端。
【问题讨论】:
标签: c linux network-programming client-server
您是否尝试过使用不同的端口?我自己没有尝试过,但也许这可以在中途帮助你。
【讨论】:
如果您真的要进行多播,则无需担心特定于物理主机的 IP:s,您需要做的就是确保所有程序(客户端和服务器)都使用相同的多播组地址.然后他们应该都会自动看到彼此的流量。
在这种情况下,没有什么可以阻止您在同时运行服务器的同一台计算机上运行多个客户端。
【讨论】:
听起来你想用不同的 IP 测试你的代码。您可以在您的接口上创建 IP 别名,并在一台计算机上模拟多个 IP。
例如如果 eth0 是您与 IP 的活动接口,例如 192.168.5.11,您可以为 eth0:0(eth0 的别名)分配另一个 IP,如下所示。
ifconfig eth0:0 192.168.5.12 netmask255.255.255.0 向上
ifconfig eth0:1 192.168.5.13 netmask255.255.255.0 向上
在其中一个 IP 上运行您的服务器并将客户端分配给您的所有别名
【讨论】:
当您没有足够的硬件时,请使用以下任一方法:
请注意,#1 的套接字选项的语义会因操作系统而异;对于#2,只有部分虚拟机支持多播,详情请咨询厂商。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms739161(v=vs.85).aspx
由于主机如何管理多播组的特定工件,最终您必须使用不同的机器进行测试。例如,您可以创建仅发送成员资格,这将阻止主机上的所有其他应用程序。还要考虑到互联网,小写“I”,将引入更多关于组加入和传播延迟和丢弃的工件,您的应用程序可能需要注意。
【讨论】:
您可以借助 IP 别名为同一台机器创建多个 IP。正如刚才提到的。 但是要在一台 PC 上创建多个服务器,如果您还想通过网络模拟所有服务器的行为,则每个服务器必须需要不同的端口。
我的意思是对于一个端口,多播流量总是会到达那个端口,PC 中的某个进程将接收数据包,并且必须为 PC 中的所有服务器提供服务,这意味着您只有一个数据包,并且所有服务器都通过本地操作接收.
但真正的模拟是您在 1 台 PC 上有多个服务器,并且所有服务器都从网络而不是本地进程接收多播流量。
我的解决方案:您保留服务器编号 == PC 上的端口编号。客户端同时通过所有端口发送组播流量,PC端的所有服务器将从网络中相应的端口接收组播数据包。
如果我的理解有误,请纠正我。
【讨论】: