2014-02-24 162 views
0

我有一个C#服务器,以及一个通过wifi工作的客户端-c客户端。一切工作正常,但现在我想检测本地网络上的所有计算机(或至少,运行我的服务器),而不是手动输入IP。 我读过一些关于这方面的帖子,他们建议做广播找到IP或读取ARP表或ping xx.xx.xx.0到255之间的每个IP地址。动态查找服务器IP地址

什么是最好的如何做到这一点?我真的不知道从哪里开始或如何去做。你有一些教程或例子吗?我在objective-c中找不到任何有用的东西。我不想使用Bonjour服务,因为我的服务器在Windows上工作。

感谢您的帮助。

+2

你说你不想使用Bonjour,因为你的服务器在Windows上运行 - 你看过[Bonjour SDK](https://developer.apple.com/bonjour/)吗?它具有各种语言的Windows库。 – thegrinner

+0

不,我没有。我会看看,我认为我需要在窗户端安装bonjour服务,这就是为什么。 – user1451884

回答

0

特定端口上实现服务器上的呼应系统说8070

我做广播消息的使用下面的代码给出的端口。

broadCastSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 
if ([broadcastSocket enableBroadcast:true error:&error] == false) { 
    NSLog(@"Failed to enable broadcast, Reason %@:",[error userInfo]); 
} 
NSData *data = [QueryString dataUsingEncoding:NSUTF8StringEncoding]; 
[broadcastSocket sendData:data toHost:@"255.255.255.255" port:8070 withTimeout:-1 tag:5]; 

您的所有服务器都将接收端口上的数据并回显给定端口的系统回复。现在你可以听到这些端口,并获得所有将回复的服务器的IP地址。当然,如果服务器是你的,这个技巧只会起作用。
注意::我正在使用GCDAsyncSocket库,但你可以使用任何你想要的。

+0

谢谢。广播IP始终是255.255.255.255? – user1451884

+0

是的。广播到这个IP将发送消息到网络中的所有IP – bhawesh

+0

尽管广播几乎总是错误的答案,尤其是在大型网络上,因为如果您拥有大量服务器和客户端,可能会产生大量网络流量。更好的方法是使用诸如Bonjour或SSDP之类的标准化服务发现协议之一。在这个特定情况下,最好的选择可能是Bonjour,因为在iOS上实现它并且在Windows服务器上相对简单。 –

0

使用Bonjour SDK,您可以在Visual Studio中找到Refereces->Right Click -> Add References -> COM tab -> Bonjour SDK or Apple Bonjour SDK。然后,您可以使用Bonjour SDK的方法来扫描Intranet。