命令行连接Socket服务
安装telnet
brew install telnet
连接socket
telnet IP地址 端口号
创建服务端
1. 导入第三方库
https://github.com/robbiehanson/CocoaAsyncSocket
从这里导入GCDAsyncSocket
2. 初始化Socket
#import "GCDAsyncSocket.h"
@property (nonatomic, strong) GCDAsyncSocket *socket;
- (void)createSocket {
dispatch_queue_t queue = dispatch_get_main_queue();
self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:queue];
}
3. 绑定和监听端口
- (void)acceptOnPort:(uint16_t)port {
// 绑定和监听
NSError *error = nil;
[self.socket acceptOnPort:port error:&error];
if (error != nil) {
NSLog(@"SocketManager acceptOnPort\n%@", error);
}
}
4. 接收客户端的连接
实现代理GCDAsyncSocketDelegate
下的方法
@property (nonatomic, strong) NSMutableArray<GCDAsyncSocket *> *clientSockets;
- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket {
[self.clientSockets addObject:newSocket];
}
5. 接收客户端发送的数据
实现代理GCDAsyncSocketDelegate
下的方法
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}
读取接收的数据
- (void)readData {
for (GCDAsyncSocket *socket in self.clientSockets) {
[socket readDataWithTimeout:-1 tag:0];
}
}
监听端口时创建定时器,用于定时读取接收的数据
- (void)addTimer {
self.timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(readData) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
}
- (void)invalidTimer {
[self.timer invalidate];
self.timer = nil;
}