您的位置:首页 > 移动开发 > IOS开发

socket

2016-07-15 15:50 330 查看
   

   
dispatch_async(dispatch_get_global_queue(0,

0), ^{

      

       
sendMsgSocketfd
=
socket(AF_INET,

SOCK_STREAM,

0);

       

       
struct
sockaddr_in  addr;

       
const
char *ipadd =  [IPAddr

cStringUsingEncoding:NSUTF8StringEncoding];

       

       
memset(&addr,

0,

sizeof(addr));

        addr.sin_family
=
AF_INET;

        addr.sin_port
=
htons(port);

       
//这个函数转换字符串到网络地址,第一个参数af是地址簇,第二个参数*src是来源地址,第三个参数*
dst接收转换后的数据。

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

       

       
int connect_fd =

connect(sendMsgSocketfd,
(struct

sockaddr*)&addr,

sizeof(addr));

       
if (connect_fd == -1)
{

           

           
NSLog(@"connect error :%s",strerror(errno));

        }

       

       
NSLog(@" >> Successfully connected to");

       

       
const
char *cMsg = [msg

cStringUsingEncoding:NSUTF8StringEncoding];

       

       
send(sendMsgSocketfd,cMsg
,
strlen(cMsg),

0);

       

       
//buffer   malloc
开辟一块这么大的内存空间

       
char *buffer =

malloc(MAX_Buffer);

       

       
//接收

       
recv(sendMsgSocketfd,
buffer,
MAX_Buffer,

0);

       

       
NSString
*str = [NSString

stringWithCString:buffer

encoding:NSUTF8StringEncoding];

       

       
dispatch_async(dispatch_get_main_queue(),
^{

           

           
NSLog(@"client receive msg %@",str);

        });

       

       
close(sendMsgSocketfd);

       

    });

   

}

/*

 

 1.打开socket,获得描述字   
socket()

 2.绑定IP地址 
bind()

 3.开始收听连接  listen()

 4.同意连接    accept()   

同步函数,会卡死当前线程,直到有客户端连接时

 5.接收数据

rev()

 6.close

 */

+(void)buildServer:(int
)port withMsgBlock:(MsgBlock)block{

   
dispatch_async(dispatch_get_global_queue(0,

0), ^{

       
serverSocketfd

socket(AF_INET,

SOCK_STREAM,

0);

       

       
struct
sockaddr_in  addr;

       
memset(&addr,

0,

sizeof(addr));

        addr.sin_family
=
AF_INET;

        addr.sin_port
=
htons(port);

        addr.sin_addr.s_addr
=
htonl(INADDR_ANY);

       

       
int bindSuccess = 

bind(serverSocketfd,(struct

sockaddr*) &addr,

sizeof(addr));

       
if (bindSuccess == -1)
{

           

           
NSLog(@"bind error : %s",strerror(errno));

           

        }

       

       
listen(serverSocketfd,

10);

       

       
NSLog(@"-------waiting for client`s request--------");

       

       
while
(1) {

           

           
int  connectfd =

accept(serverSocketfd,

NULL,

NULL);

           

           
if (connectfd == -1)
{

               
continue;

            }

           

           

           
char *buffer =

malloc(MAX_Buffer);

           
//char buffer[MAX_Buffer];

           

           
//接收

           
recv(connectfd, buffer,

MAX_Buffer,

0);

           

           
NSString
*str = [NSString

stringWithCString:buffer

encoding:NSUTF8StringEncoding];

           
dispatch_async(dispatch_get_main_queue(),
^{

                block(str);

            });

           

           
const
char *sendmm =

"hello world";

           
send(connectfd,sendmm ,

strlen(sendmm),

0);

           
NSLog(@"send success");

           

           
close(connectfd);

        }

       

    });

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS开发 it socket