◎위챗 : speedseoul
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 카테고리 참조.)
서버를 실행하면
실행되는것을 확인하고 웹브라우저에 한번 입력해본다.
이로써 초간단 서버가 만들어 졌다. 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 alloc] init];
[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 URLWithString: URL];
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 [길위의 개발자]