码迷,mamicode.com
首页 > 其他好文 > 详细

Socket的简单使用

时间:2016-01-26 21:56:43      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

注意;这里是封装出来一个工具类 创建类方法来实现客户端和服务端的socket的创建 和 分别的一些必须实现的方法

  socket 通信需要一个客户端和一个服务端

客户端和服务端都得有一个socket (类似于用于通信的手机)int socket的方法

服务器端要做的操作有: 1.创建socket 2.绑定一个众所周知的地址(bind)3.处于监听状态 (listen) 4.随时处于接受请求,作出响应,accept 5.接受信息 recv

客户端要做的操作的有;1.创建socket 2.实现链接(connect)3.发送信息 send

 

使用socket时 要导入头文件

#import <netdb.h>

#import <arpa/inet.h>

 

 

#import "Socket.h"

 

@implementation Socket

 

//封装出类方法 创建服务端

+(void)serviceWithport:(int)port with:(Myblock)block{

    

    dispatch_queue_t globel = dispatch_get_global_queue(0, 0);

    dispatch_async(globel, ^{

//        1.创建服务端的socket

    

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

        if (!serviceId) {

            NSLog(@"socket error");

            return;

        }

//    2.进行绑定地址

//        2.1创建地址的结构体

        struct sockaddr_in addr;

//        2.1.1初始化创建的结构体

        memset(&addr, 0, sizeof(addr));

//        2.1.2设置ip地址参数

        addr.sin_family = AF_INET;

//        2.1.3设置ip端口

        addr.sin_port = port ;

        addr.sin_addr.s_addr = htonl(INADDR_ANY);

        

    int blindId = bind(serviceId, (struct sockaddr*)&addr, sizeof(addr));

        if (blindId == -1) {

            NSLog(@"bind error");

            return;

        }

        

//    3.实现监听

        int listenId = listen(serviceId, 10);

        if (listenId == -1) {

            NSLog(@"监听失败");

            return;

        }

//        4.实现响应  //创建一个while 可以多次接受客户端的访问

        while (1) {

            int acceptid =  accept(serviceId, NULL, NULL);

            //        5.接收信息

            //        5.1创建一个字符串数组

            char str[1000];

            long recvId =  recv(acceptid, &str, 1000, 0);

            if (recvId) {

                block(str);

            }

            NSLog(@"str = %s",str);

 

        }

        

    });

}

+(void)clientWithPort:(int)port address:(NSString *)address msg:(NSString *)msg{

    

    dispatch_queue_t globel = dispatch_get_global_queue(0, 0);

    dispatch_async(globel, ^{

        //    1.创建socket

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

        if (!clientId ) {

            NSLog(@"socket error");

            return ;

        }

//   2.进行连接

        struct sockaddr_in addr;

        memset(&addr, 0, sizeof(addr));

        addr.sin_port = port ;

        addr.sin_family = AF_INET;

//      将oc字符串地址转换成字符串

        const char *str = [address UTF8String];

        inet_pton(AF_INET, str, &addr.sin_addr);

//        连接connect

       int connectId = connect(clientId,(struct sockaddr*) &addr, sizeof(addr));

        if (connectId == -1) {

            NSLog(@"connect error");

            return;

        }

//        将oc 字符串信息转换成C字符

        const char *str2 = [msg UTF8String];

//        发送信息

        send(clientId, str2, sizeof(str2), 0);

        close(clientId);

    });

    

    

    

    

}

 

@end

 

Socket的简单使用

标签:

原文地址:http://www.cnblogs.com/ztlucky/p/5161584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!