Objective-c 服务端

//
//  main.m
//  服务端12-11
//
//  Created by dc004 on 15/12/11.
//  Copyright © 2015年 gang. All rights reserved.
//

#import <Foundation/Foundation.h>
//提供socket函数以及数据结构
#include <sys/socket.h>
//定义数据结构
#include <netinet/in.h>
//提供IP地址转换函数
#include <arpa/inet.h>
int main() {
   //服务端顺序:socket->bind->listen->while(true) accept->do while recv ->close
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    BOOL success = (fd != -1);
    struct sockaddr_in addr;
    int err;
    //服务端地址设置
    if (success) {
        NSLog(@"socket success");
        memset(&addr, 0, sizeof(addr));
        addr.sin_len = sizeof(addr);
        addr.sin_family = AF_INET;//IPv4
        addr.sin_port = htons(1024);
        addr.sin_addr.s_addr = INADDR_ANY;
        //进行绑定
        err = bind(fd, (const struct sockaddr*)&addr, sizeof(addr));
        success = (err == 0);
    }if (success) {
        NSLog(@"bind成功");
        //listen监听
        //第二个参数为等待接收的连接的队列的大小。比如在connect请求过来的时候,完成三次握手后先将连接放到队列中,直到被accept处理。如果这个队列满了,并且又有新的连接的时候,对方可能会收到错误信息。
        err = listen(fd, 5);
        success = (err == 0);
    }if (success) {
        NSLog(@"listen success");
        while (true) {
            struct sockaddr_in clientaddr;
            //定义客户端的套接字,用于获取接收到的客户端套接字。
            int clientfd;
            //定义一个地址长度变量,接收客户端的长度
            socklen_t addrLen;
            addrLen = sizeof(clientaddr);
            NSLog(@"准备接收");
            //accept函数
            //第二个参数用于返回客户端的协议地址
            //第三个参数为协议地址的长度
            clientfd = accept(fd, (struct sockaddr*)&clientaddr, &addrLen);
            success = (clientfd != -1);
            if (success) {
                char buf[1024];
                ssize_t count;//用于接收函数的返回值
                size_t len = sizeof(buf);
                do{
                    //recv()成功返回实际读入缓冲的数据字节数。
                    count = recv(clientfd, buf, len, 0);
                    if (count < 0) {
                        NSLog(@"再见");
                        break;
                    }
                    //输出(将c语言字符串转换成oc字符串输出)
                    NSString *str = [NSString stringWithCString:buf encoding:NSUTF8StringEncoding];
                    NSLog(@"%@",str);
                    
                    
                }while (strcmp(buf, "exit") != 0);
            }
            //关闭客户端:只是关闭这个套接字特定的TCP连接
            close(clientfd);
        }
    }
    
    return 0;
}


你可能感兴趣的:(Objective-c 服务端)