首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SocketRocket扫描网络与连接

SocketRocket扫描网络与连接
EN

Stack Overflow用户
提问于 2014-03-20 20:32:30
回答 1查看 814关注 0票数 1

我是SocketRocket新手,我想做的是扫描网络192.168.1.x,当它发现服务器连接到它。这是我的密码:

代码语言:javascript
复制
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打开只能进行一次,但我不知道如何扫描然后连接到服务器。

EN

回答 1

Stack Overflow用户

发布于 2014-03-21 00:08:36

[self.serverSocket open]是一个异步调用--也就是说,它将立即返回,如果/如果套接字成功连接,则调用委托方法webSocketDidOpen:;如果没有,则调用didFailWithError:

您可以更改循环,以便它使用局部变量而不是属性-

代码语言:javascript
复制
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];

}

然后在委托方法中需要存储连接成功的套接字-

代码语言:javascript
复制
- (void)webSocketDidOpen:(SRWebSocket *)webSocket
  {
     self.serverSocket=webSocket;
     //TO DO start processing data on the socket...
  }

但是,这是一种非常难看的定位和连接服务的方式:

  • 它使用多个连接请求“垃圾邮件”本地网络。
  • 它在本地设备上浪费了大量资源。
  • 它不处理在不同设备上端口上运行多个服务/服务器的情况
  • 如果本地网络不是192.168.1.x呢?

您应该研究其他用于标识服务器地址的选项,例如Bonjour,甚至是设置服务器地址的简单应用程序首选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22544423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档