https://abc1211.tistory.com/565


목표

node js 로 서버를 만들고 nssession을 이용해서 통신하기


순서

1.nods js 로 서버를 구동시킨다.

2.xcode storyboard  뷰를 만든다.

3.Viewcontroller.h 에 NSURLConnectionDelegate를 상속받는다. 

4.Viewcontroller 에 nssession 을이용해서 서버와 통신을 한다.






node js 서버

(node js 로 구성한 초간단 서버다. get,post 방식으로 접속했을때 아래 로직을 타고, 이름과 비밀번호를 json방식으로 리턴하는 로직이다.

자세한건 node js  카테고리 참조.)

// 라우터를 설정합니다.
app.get('/test', function (request, response) {
// 응답합니다.
response.json({username:request.query.username,password:request.query.password});
});
app.post('/test', function (request, response) {
// 변수를 선언합니다.
var username = request.body.username;
var password = request.body.password;
response.json({username:username,password:password});


});

서버를 실행하면


실행되는것을 확인하고 웹브라우저에 한번 입력해본다.


이로써 초간단 서버가 만들어 졌다. xcode로 view를 만들고 viewcontroller부분을 만들어보자.

storyboard.main



viewcontroller.h

이 파일에 위에 스토리보드에서 만든 엘리먼트들을 연결했다. 잘확인~!

viewcontroller.m


//

//  ViewController.m

//  Http

//

//  Created by 위피아 on 26/10/2018.

//  Copyright © 2018 위피아. All rights reserved.

//


#import "ViewController.h"


@interface ViewController ()


@end



@implementation ViewController{


    NSMutableData *mutableData;

    

#define URL @"http://10.47.212.74:3000/test"

    #define NO_CONNECTION @"no connection"

    #define NO_VALUES @"please enter parameter values"

    

}

@synthesize username,password,serverResponse;


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

}


- (IBAction)sendDataUsingGet:(id)sender {

    [self sendDataToServer:@"GET"];

}



- (IBAction)sendDataUsingPost:(id)sender {

    [self sendDataToServer:@"POST"];

}


//버튼 클릭 했을때

- (void)sendDataToServer:(NSString *)method{

    //입력한 이름과 비밀번호 할당

    NSString *usrname = username.text;

    NSString *pass = password.text;

    

    //값이 존재하면

    if(usrname.length > 0 && pass.length >0){

        serverResponse.text = @"getting response from server";

        

        if([method isEqualToString:@"GET"]){

            //get 방식일때

            NSString *getURL = [NSString stringWithFormat:@"%@?username=%@&password=%@",URL,usrname,pass];


            NSMutableURLRequest *request = [[NSMutableURLRequest allocinit];

            [request setURL:[NSURL URLWithString:getURL]];

            [request setHTTPMethod:@"GET"];

            

            NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

            [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

                

                if (data!=nil)

                {

                    //NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

                    //NSLog(@"Request reply: %@", requestReply);

                    NSDictionary* json = [NSJSONSerialization

                                          JSONObjectWithData:data

                                          options:kNilOptions

                                          error:&error];

                    

                    //                    for (NSDictionary *project in json[@"projects"]) {

                    //                        NSLog(@"Project name: %@", project[@"name"]);

                    //                    }

                    

                    NSLog(@"username %@",  [json objectForKey:@"username"]);

                    NSLog(@"password %@", [json objectForKey:@"password"]);

                    

                }

                else

                {

                    NSLog(@"error");

                    

                }

                

                

                

            }] resume];

            

        }else{

            

            //전송방식이 post일때~!

            

            // 기본 구성에 URLSession 생성

            NSURLSessionConfiguration *defaultSessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];

            NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration:defaultSessionConfiguration];

            

            // request URL 설정

            NSURL *url = url = [NSURL URLWithStringURL];

            NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];

            

            // UTF8 인코딩을 사용하여 POST 문자열 매개 변수를 데이터로 변환

            NSString *postParams = [NSString stringWithFormat:@"username=%@&password=%@",usrname,pass];

            NSData *postData = [postParams dataUsingEncoding:NSUTF8StringEncoding];

            

            // 셋팅

            [urlRequest setHTTPMethod:@"POST"];

            [urlRequest setHTTPBody:postData];

            

            // dataTask 생성

            NSURLSessionDataTask *dataTask = [defaultSession dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

                if (data!=nil)

                {

                    NSDictionary* json = [NSJSONSerialization

                                          JSONObjectWithData:data

                                          options:kNilOptions

                                          error:&error];


//                    for (NSDictionary *project in json[@"projects"]) {

//                        NSLog(@"Project name: %@", project[@"name"]);

//                    }

                    

                    NSLog(@"username %@",  [json objectForKey:@"username"]);

                    NSLog(@"password %@", [json objectForKey:@"password"]);

                    

                }

                else

                {

                    NSLog(@"error");

                   

                }

                

            }];

            

            // request 종료

            [dataTask resume];

            

        }


    }else

    {

        serverResponse.text = NO_VALUES;

    }

    

}



@end



출처: https://abc1211.tistory.com/565 [길위의 개발자]