网络:请求本地服务器做法(socket)
来源:互联网 发布:知乎为什么叫b乎 编辑:程序博客网 时间:2024/06/07 03:40
#import "ViewController.h"#import <sys/socket.h> // 没注释#import <netinet/in.h>#import <arpa/inet.h>@interface ViewController ()@property (weak, nonatomic) IBOutlet UITextField *ipAdress;@property (weak, nonatomic) IBOutlet UITextField *port;@property (weak, nonatomic) IBOutlet UITextField *messageInput;@property (weak, nonatomic) IBOutlet UILabel *resultLabel;@property (nonatomic, assign) int clientSocket;@end@implementation ViewController- (IBAction)connection:(id)sender { [self createSocketAndConnectionWithIPAddress:self.ipAdress.text port:[self.port.text integerValue]];}/* 1. 如果请求是走socket 的,不需要配置https 相当的上网问题 */- (IBAction)send:(id)sender { // 连接百度的时候停住了,这个时候不是没反应// NSString *message = @"GET / HTTP/1.1\r\n"// "Host: localhost\r\n"// "Connection: Close\r\n\r\n"; //原版: NSString *message = @"GET /test.txt HTTP/1.1\r\n" "Host: localhost\r\n" "Connection: Close\r\n\r\n"; [self sendAndRecv:message];// NSString *msg = [self sendAndRecv:message];// NSLog(@"%@",msg);// self.resultLabel.text = msg;}- (void)createSocketAndConnectionWithIPAddress:(NSString *)IPAddress port:(NSInteger)port { // 创建socket /** 参数解析 第 1个参数 domain 协议域(AF_INET,IPV4 网络开发) (IPV6 不需要管) 第 2个参数 type socket类型,SOCK_STREAM(TCP)/SOCK_DGRAM(UDP) 第三个参数 protocol 协议,如果输 0,可以根据第 2 个参数, 自动选择协议 返回值:如果返回>0 则表 成功 */ int result = socket(AF_INET, SOCK_STREAM, 0); if (result > 0) { NSLog(@"创建成功%d",result); } // 连接 /** 1. 第一个 socket 2. 服务器地址 */ struct sockaddr_in serverAddress; // 设置ip 127.0.0.1 serverAddress.sin_addr.s_addr = inet_addr([IPAddress UTF8String]); // 设置端口号(高低位转换) serverAddress.sin_port = htons(port); // 设置协议 serverAddress.sin_family = AF_INET; // 连接socket int connectResult = connect(result, (const struct sockaddr *)&serverAddress, sizeof(serverAddress)); if (connectResult == 0) { self.resultLabel.text = @"连接成功"; } self.clientSocket = result;}// 发送消息和接收消息- (NSString *)sendAndRecv:(NSString *)sendMsg { NSString *message = sendMsg; // 发送消息 /* 1. socket 2. 发送的内容 3. 内容的长度 发送的标记 通常写 0 就可以 */ ssize_t sendResult = send(self.clientSocket, [message UTF8String], strlen([message UTF8String]), 0); NSLog(@"...%ld",sendResult); // 接收 /* 1, socket 2. 接收的数据 3. 接收的长度 4. 写0代表阻塞式 */ uint8_t buff[1024]; // NSLog(@"buff -- %ld",sizeof(buff)); ssize_t recvResult; NSMutableData *dataM = [NSMutableData data]; while (recvResult != 0) { recvResult = recv(self.clientSocket, buff, sizeof(buff), 0); [dataM appendBytes:buff length:recvResult]; NSLog(@"recv == %ld",recvResult); } // NSLog(@"%ld",recvResult); // 把收到的数据转成OC NSString *recvMessage = [[NSString alloc]initWithData:dataM encoding:NSUTF8StringEncoding]; NSLog(@"--%@",recvMessage); return recvMessage;}- (void)closeConnection { close(self.clientSocket);}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}/* 1. ip 找到对应的电脑 2. 端口号 找到对应的程序 3. 协议 发送内容方式 */- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {}@end
0 0
- 网络:请求本地服务器做法(socket)
- 【网络开发】详谈socket请求Web服务器过程
- Android 网络请求(HTTP、Socket)出错
- Lunix网络编程之socket(客户端发送请求,服务器处理例如:排序,两人联机五子棋)
- socket网络服务器
- 写入本地和请求网络
- socket请求Web服务器过程
- socket 请求Web服务器过程
- socket 请求Web服务器过程
- 完美网络(简单做法)
- 网络请求HttpClient,Socket,WebSocket
- 网络请求HttpClient,Socket,WebSocket
- java-socket多线程网络编程案列--搭建本地简易聊天对话服务器
- iOS Mac本地服务器moco服务端并进行网络请求实战
- java之--------socket编程(TCP)服务器请求与客户端
- Linux网络服务器socket编程
- Java 网络编程 服务器Socket
- socket多线程网络服务器 java
- Crawler4j总结(2)
- ThinkPHP使用存储过程
- 《C++ Primer Plus》——编程练习答案(11)
- #ifndef:避免头文件的重复包含和编译
- 编译错误stray ‘\343’ in program解决办法
- 网络:请求本地服务器做法(socket)
- 方法区
- dict的特点
- 神经网络-激活函数-面面观(Activation Function)
- 同源策略概念 简述
- 网络叹号 win10 猎豹WIFI 网络连接失败
- java自动装箱拆箱深入剖析
- 更新dict
- 数据库中自定义存储函数详解