网络编程socket(服务端简单模拟)(OC)
2016-06-23 21:31
435 查看
现在直播这么火,了解socket,甚至对于开发对应的直播软件都是非常重要的;所以,在这里,记录一下一个服务端的简单模拟代码:
说明:服务器端是一直保持运行状态,如果不开启主循环,服务器对象刚创建就会die;
int main(int argc, const char * argv[]) { @autoreleasepool { LZP_socket * socket = [[ppp alloc] init]; [socket start]; [[NSRunLoop mainRunLoop] run]; //如果不开启主循环,开启服务器后会立马关闭; } return 0; }
说明:服务器端是一直保持运行状态,如果不开启主循环,服务器对象刚创建就会die;
#import "LZP_socket.h" #import "GCDAsyncSocket.h" @interface LZP_socket()<GCDAsyncSocketDelegate> @property(strong, nonatomic) GCDAsyncSocket * socket; @property(strong, nonatomic)NSMutableArray * clientArray; @end @implementation LZP_socket -(NSMutableArray *)clientArray{ if (_clientArray == nil) { _clientArray = [NSMutableArray array]; } return _clientArray; } -(void)start{ //该方法是用来开启socket服务端; //创建一个socket对象/如果该 4000 对象不进行全局属性保存,作用域就是该方法内部,无法持续性开启... self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(0, 0)]; NSError * error = nil; [self.socket acceptOnPort:5333 error:&error]; if (error != nil) { NSLog(@"链接失败"); }else{ NSLog(@"服务已经开启"); } } //该方法是socket代理方法,用来监听接受的客户端; -(void)socket:(GCDAsyncSocket *)serverSocket didAcceptNewSocket:(GCDAsyncSocket *)clientsock{ //监听到的客户端,如果不采取措施保存,也会在方法结尾处die,所以使用一个数组,将各个链接服务端的客户端保存起来; [self.clientArray addObject:clientsock]; NSLog(@"%lu",(unsigned long)self.clientArray.count); //监听客户端输入 [clientsock readDataWithTimeout:-1 tag:0]; } //该刚发是用来监听客户端的输入; -(void)socket:(GCDAsyncSocket *)clientsock didReadData:(NSData *)data withTag:(long)tag{ NSString * dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",dataStr); [clientsock readDataWithTimeout:-1 tag:0]; for (GCDAsyncSocket * sock in self.clientArray) { if (clientsock != sock) {//除了自己外的其他客户端接收自己发的信息 //将信息发送给其他的客户端sock; [sock writeData:data withTimeout:-1 tag:0]; } }} @end
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- java socket 注意的地方
- java socket 注意的地方
- 批量自动安装常用软件
- 批量自动安装常用软件
- 企业批量部署RealVNC远程控制软件
- 好用的Markdown编辑器一览
- 网上视频站 视频下载利器 优酷网 视频下载 必备 软件 下载[原创]_常用工具_脚本之家
- C#基于socket模拟http请求的方法
- Lua下基本的网络编程示例
- 简单的Ruby中的Socket编程教程
- Socket不能选择本地IP连接问题如何解决
- C#之Socket操作类实例解析
- 使用C#来编写一个异步的Socket服务器
- C#使用Socket快速判断数据库连接是否正常的方法
- 科学知识:理解socket
- websocket++简单使用及实例分析
- linux网络编程用到的网络函数详解用和使用示例