socket

来源:互联网 发布:淘宝上的摩托车能买吗 编辑:程序博客网 时间:2024/06/05 02:17

   
   
dispatch_async(dispatch_get_global_queue(0,0), ^{
      
       
sendMsgSocketfd = socket(AF_INET,SOCK_STREAM,0);
       
       
struct sockaddr_in  addr;

       
const char *ipadd =  [IPAddrcStringUsingEncoding: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, (structsockaddr*)&addr,sizeof(addr));
       
if (connect_fd == -1) {
           
           
NSLog(@"connect error :%s",strerror(errno));
        }
       
       
NSLog(@" >> Successfully connected to");
       
       
const char *cMsg = [msgcStringUsingEncoding:NSUTF8StringEncoding];
       
       
send(sendMsgSocketfd,cMsg , strlen(cMsg),0);
       
       
//buffer   malloc 开辟一块这么大的内存空间
       
char *buffer =malloc(MAX_Buffer);
       
       
//接收
       
recv(sendMsgSocketfd, buffer, MAX_Buffer,0);
       
       
NSString *str = [NSStringstringWithCString:bufferencoding: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,(structsockaddr*) &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 = [NSStringstringWithCString:bufferencoding: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);
        }
       
    });
}
0 0