ios socket c 编程

谈到socket编程,业内已经有了很多socket第三方很好用的框架 CocoaSyncSocket ,socketIO, 如果要了解socket的原理,还是从用c语言建立一个简单socket开始

1.建立链接

//SOCK_STREAM 代表用TCP 连接

//AF_INET 代表是ipv4网络

int server_socket = socket(AF_INET, SOCK_STREAM, 0);

    if (server_socket == -1) {

        NSLog(@"创建失败");

    }else{

        //绑定地址和端口

        int port = 1234;

        NSString *serverIP = @"127.0.0.1";

        struct sockaddr_in server_addr;

        server_addr.sin_len = sizeof(struct sockaddr_in);

        server_addr.sin_family = AF_INET;

        server_addr.sin_port = htons(port);

        server_addr.sin_addr.s_addr = inet_addr(serverIP.UTF8String);

        bzero(&(server_addr.sin_zero), 8);

        //创建新的socket

        int aResult = connect(server_socket, (struct sockaddr*)&server_addr, sizeof(struct sockaddr_in));

        if (aResult == -1) {

            NSLog(@"链接失败");

        }else{

            self.server_socket = server_socket;

            if(self.sockectThread == nil) {

                // 异步线程接受客户端的链接

                self.sockectThread = [[NSThread alloc] initWithTarget:self selector:@selector(acceptFromServer) object:nil];

            }

        }

    } 

2.发送数据

-(void)sendMsg:(NSString*)msg {
    
    /*send 方法参数
     
     参数1:客户端的socket
     
     参数2: 要发送的内容
     
     参数3: 要发送内容的长度,字节
     
     发送标示位 传0即可
     
     */
    
    char *buf[1024] = {0};
    
    const char *p1 = (char*)buf;
    
    p1 = [msg cStringUsingEncoding:NSUTF8StringEncoding];
    
    send(self.server_socket, p1, 1024, 0);
    
}

3.接收数据

- (void)acceptFromServer{
    
        //死循环接收数据
        
        while (1) {
             @autoreleasepool {
            //接受服务器传来的数据
            
            char buf[1024];
            
            long iReturn = recv(self.server_socket, buf, 1024, 0);
            
            if (iReturn>0) {
                
                NSString *str = [NSString stringWithCString:buf encoding:NSUTF8StringEncoding];
                
                //通知代理处理事情
                
            }else if (iReturn == -1){
                
                NSLog(@"接受失败-1");
                
                break;
                
            }
            
        }
        
    }
    
}

这就是ios 客户端如果要用源码实现一个最简单的socket需要的代码,其中有好多问题,发送数据的时候如果数据超过了1024个字节,就会产生丢失。接收socket数据的时候没有处理,安全性问题等等。

通过Socket编程更深刻了解Socket原理,用CocoaSyncSocket,写了一个Socket 心跳连接,断包,黏包,断线重连的demo https://github.com/maoemao/socketDemo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 谈到socket编程,业内已经有了很多socket第三方很好用的框架 CocoaSyncSocket ,socke...
    maoege阅读 505评论 0 0
  • 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 按照计算机网络的定义,通过一定...
    蛋炒饭_By阅读 1,258评论 0 10
  • 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编...
    程序员欧阳阅读 2,045评论 1 37
  • Socket编程 1基础知识 协议 端口号(辨别不同应用) TCP/IP协议 是目前世界上应用最广泛的协议是以TC...
    __豆约翰__阅读 1,110评论 0 3
  • 网红这个词在2016年移动互联网火爆的环境驱使下,出名变得越来越容易,一切似乎乐观得如那句名言所说——“每个人都能...
    公子义阅读 305评论 0 1