繁体   English   中英

SocketRocket扫描网络并连接

[英]SocketRocket scan network and connect

我是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]只能执行一次,但是我不知道如何扫描然后连接到服务器。

[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,甚至是用于设置服务器地址的简单应用程序首选项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM