我是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打开]只能做一次,但我不知道如何扫描,然后连接到服务器。
[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,或者甚至使用简单的应用程序首选项来设置服务器地址