生活随笔
收集整理的這篇文章主要介紹了
IOS开发基础之socket的使用
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
IOS開(kāi)發(fā)基礎(chǔ)之socket的使用
socket是純C語(yǔ)言的,跨平臺(tái)的
第一章:
#import "ViewController.h"
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
@interface ViewController
()
@end
@implementation ViewController
- (void)viewDidLoad
{[super viewDidLoad
];int clientSocket
= socket(AF_INET
,SOCK_STREAM
,IPPROTO_TCP
);struct sockaddr_in addr
;addr
.sin_family
= AF_INET
;addr
.sin_addr
.s_addr
= inet_addr("127.0.0.1");addr
.sin_port
=htons(12345);int result
= connect(clientSocket
,(const struct sockaddr
*) &addr
, sizeof(addr
));if(result
!=0){NSLog(@"失敗");return;}const char *msg
= "Hello World";ssize_t sendCount
= send(clientSocket
,msg
, strlen(msg
),0);NSLog(@"發(fā)送的字節(jié)數(shù) %zd",sendCount
);uint8_t buffer
[1024];ssize_t recvCount
= recv(clientSocket
,buffer
, sizeof(buffer
),0);NSLog(@"接收的字節(jié)數(shù) %zd",recvCount
);NSData
*data
= [NSData dataWithBytes
:buffer length
:recvCount
];NSString
*recvMsg
= [[NSString alloc
] initWithData
:data encoding
: NSUTF8StringEncoding
];NSLog(@"收到的的信息 %@",recvMsg
);close(clientSocket
);
}
@end
第二章
#import "ViewController.h"
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
@interface ViewController
()
@property (weak
, nonatomic
) IBOutlet UITextField
*portView
;
@property (weak
, nonatomic
) IBOutlet UITextField
*ipView
;
@property (weak
, nonatomic
) IBOutlet UITextField
*sendMsgView
;
@property (weak
, nonatomic
) IBOutlet UILabel
*recvMsgView
;
@property(nonatomic
,assign
) int clientSocket
;
@end
@implementation ViewController
- (IBAction
)connectClick
:(id
)sender
{[self connect
:self.ipView
.text port
:[self.portView
.text intValue
]];
}
- (IBAction
)sendClick
:(id
)sender
{self.recvMsgView
.text
= [self sendAndRecv
:self.sendMsgView
.text
];
}
- (IBAction
)closeClick
:(id
)sender
{close(self.clientSocket
);NSLog(@"關(guān)閉連接");
}
- (void)viewDidLoad
{[super viewDidLoad
];
}
-(NSString
*)sendAndRecv
:(NSString
*)sendMsg
{const char *msg
= sendMsg
.UTF8String
; ssize_t sendCount
= send(self.clientSocket
,msg
, strlen(msg
),0);NSLog(@"發(fā)送的字節(jié)數(shù) %zd",sendCount
);uint8_t buffer
[1024];ssize_t recvCount
= recv(self.clientSocket
,buffer
, sizeof(buffer
),0);NSLog(@"接收的字節(jié)數(shù) %zd",recvCount
);NSData
*data
= [NSData dataWithBytes
:buffer length
:recvCount
];NSString
*recvMsg
= [[NSString alloc
] initWithData
:data encoding
: NSUTF8StringEncoding
];NSLog(@"收到的的信息 %@",recvMsg
);return recvMsg
;
}
-(BOOL
)connect
:(NSString
*)ip port
:(int)port
{int clientSocket
= socket(AF_INET
,SOCK_STREAM
,IPPROTO_TCP
);self.clientSocket
= clientSocket
;struct sockaddr_in addr
;addr
.sin_family
= AF_INET
;addr
.sin_addr
.s_addr
= inet_addr(ip
.UTF8String
); addr
.sin_port
=htons(port
);int result
= connect(self.clientSocket
,(const struct sockaddr
*) &addr
, sizeof(addr
));if(result
==0){return YES
;}else{return NO
;}}
@end
info.plist加入ATS
<key>NSAppTransportSecurity
</key><dict><key>NSAllowsArbitraryLoads
</key><true/></dict>
第三章
#import "ViewController.h"
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
@interface ViewController
()
@property (weak
, nonatomic
) IBOutlet UIWebView
*webView
;
@property(nonatomic
,assign
) int clientSocket
;
@end@implementation ViewController
- (void)viewDidLoad
{[super viewDidLoad
];BOOL result
= [self connect
:@"36.152.44.96" port
:80];if(!result
){NSLog(@"連接失敗");return;}NSLog(@"連接成功");NSString
*request
= @"GET / HTTP/1.1\r\n""Host: www.baidu.com\r\n""Connection: close\r\n\r\n";NSString
*response
= [self sendAndRecv
:request
];close(self.clientSocket
);NSLog(@"%@",response
);NSRange range
= [response rangeOfString
:@"\r\n\r\n"];NSString
*html
= [response substringFromIndex
:range
.length
+ range
.location
];[self.webView loadHTMLString
:html baseURL
:nil
];[self.webView loadHTMLString
:html baseURL
:[NSURL URLWithString
:@"http://www.baidu.com"]];
}-(NSString
*)sendAndRecv
:(NSString
*)sendMsg
{const char *msg
= sendMsg
.UTF8String
; ssize_t sendCount
= send(self.clientSocket
,msg
, strlen(msg
),0);NSLog(@"發(fā)送的字節(jié)數(shù) %zd",sendCount
);uint8_t buffer
[1024];NSMutableData
*mData
= [NSMutableData data
];ssize_t recvCount
= recv(self.clientSocket
,buffer
, sizeof(buffer
),0);[mData appendBytes
:buffer length
:recvCount
];while(recvCount
!=0){recvCount
= recv(self.clientSocket
,buffer
, sizeof(buffer
),0);NSLog(@"接收的字節(jié)數(shù) %zd",recvCount
);[mData appendBytes
:buffer length
:recvCount
];}NSString
*recvMsg
= [[NSString alloc
] initWithData
:mData
.copy encoding
:NSUTF8StringEncoding
];return recvMsg
;
}
-(BOOL
)connect
:(NSString
*)ip port
:(int)port
{int clientSocket
= socket(AF_INET
,SOCK_STREAM
,IPPROTO_TCP
);self.clientSocket
= clientSocket
;struct sockaddr_in addr
;addr
.sin_family
= AF_INET
;addr
.sin_addr
.s_addr
= inet_addr(ip
.UTF8String
); addr
.sin_port
=htons(port
);int result
= connect(self.clientSocket
,(const struct sockaddr
*) &addr
, sizeof(addr
));if(result
==0){return YES
;}else{return NO
;}
}
@end
總結(jié)
以上是生活随笔為你收集整理的IOS开发基础之socket的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。