网络编程socket(服务端简单模拟)(OC)

现在直播这么火,了解socket,甚至对于开发对应的直播软件都是非常重要的;所以,在这里,记录一下一个服务端的简单模拟代码:

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对象/如果该对象不进行全局属性保存,作用域就是该方法内部,无法持续性开启...
    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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值