SocketRocket 扫描网络并连接
Posted
技术标签:
【中文标题】SocketRocket 扫描网络并连接【英文标题】:SocketRocket scan network and connect 【发布时间】:2014-03-20 20:32:30 【问题描述】:我是 SocketRocket 的新手,我想做的是扫描网络 192.168.1.x 并找到服务器连接到它。 这是我的代码:
NSString *seg=@"ws://192.168.1.";
NSString *puerto=@":5000";
self.socketReady = NO;
for (int i=0; i<255; i++)
NSMutableString *ip =[[NSMutableString alloc]init];
[ip appendString:seg];
[ip appendString:[@(i) stringValue]];
[ip appendString:puerto];
self.serverSocket = [[SRWebSocket alloc] initWithURL:[[NSURL alloc] initWithString:ip]];
self.serverSocket.delegate = self;
[self.serverSocket open];
我知道[self.serverSocket open]只能做一次,但是不知道怎么扫描然后连接服务器。
【问题讨论】:
【参考方案1】:[self.serverSocket open]
是一个异步调用 - 也就是说,它将立即返回,当/如果套接字成功连接时调用您的委托方法 webSocketDidOpen:
,如果没有,则调用 didFailWithError:
。
您可以更改循环,使其使用局部变量而不是您的属性 -
NSString *seg=@"ws://192.168.1.";
int puerto=5000;
for (int i=0; i<255; i++)
NSString *ip =[NSString stringWithFormat:@"%@%d:%d",seg,i,puerto];
SRWebSocket *newSocket = [[SRWebSocket alloc] initWithURL:[[NSURL alloc] initWithString:ip]];
newSocket.delegate = self;
[newSocket open];
然后在委托方法中,您需要存储成功连接的套接字 -
- (void)webSocketDidOpen:(SRWebSocket *)webSocket
self.serverSocket=webSocket;
//TO DO start processing data on the socket...
但是这是一种非常丑陋的定位和连接服务的方式:
它通过多个连接请求向本地网络发送“垃圾邮件” 这会在您的本地设备上浪费大量资源 它不处理在不同设备上的端口上运行多个服务/服务器的情况 如果本地网络不是 192.168.1.x 怎么办?您应该研究用于识别您的服务器地址的其他选项,例如 Bonjour,甚至是一个简单的应用程序首选项来设置服务器地址
【讨论】:
以上是关于SocketRocket 扫描网络并连接的主要内容,如果未能解决你的问题,请参考以下文章