Socket原理和应用(套接字),网络底层其实就是socket.即时通信用的很多.
纯C语言的.理解知道网络请求是怎么发送数据的.
网络三要素:ip地址,端口,协议(怎么传UDP/TCP).
ip地址找主机,端口找服务器,协议传输数据.
本地回环地址:127.0.0.1 主机名:localhost.
ip地址:过交换机回来.ping不通说明网线有问题.
端口号:保留0-1024,只能使用后面1024-某个值
UDP:用户数据包协议
TCP:传输控制协议
原理:用于在两个客户端与服务器中间进行通信,是TCP\IP的上一层协议.有两个基本概念,客户方(发起请求的一方)和服务方(接收请求的一方)是相对的.两个应用程序首先需要建立socket连接,需要知道服务方的IP地址或机器名称,需要一个约定端口(Port)来确定方式呼叫服务方.但是服务方必须处于监听状态,接受到连接请求,然后建立连接(可以建立也可以拒绝).
发送的消息类型:文本或二进制.
通过ip找主机,通过端口号找程序.
客户方消息到达服务方端口时,会自定触发事件,服务方只要接管事件就可以了,就可以接受到客户方的消息了.
- 导入头文件
- 创建客户方socket
- 连接服务器
- 发送数据
- 接收数据
//1. 导入
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
//2. 创建(可能成功失败)
self.clientSocket = socket(AF_INET, SOCK_STREAM, 0);
//3. 连接(可能成功失败)
connect(self.clientSocket, (const struct sockaddr *)&severAddress, sizeof(severAddress))
//4. 发送
send(self.clientSocket,msg.UTF8String, strlen(msg.UTF8String), 0)
//5. 接收
recv(self.clientSocket, buffer, sizeof(buffer), 0)
//6. 关闭
close(self.clientSocket);
OVER既可以接收又可以发送了
都是C语言程序.代码不用记住,理解就好了.
建立请求的过程,发送数据的原理
请求行:指定请求方法,请求资源路径以及HTTP协议版本.
GET / HTTP/1
请求头:对客户端的环境描述,至少要包含主机地址.
还可以包含以下信息
- 客户端类型:
User-Agent:iPhone AppleWebKit - 客户端能接收到的数据类型
Accept: text/html
等等
请求体:客户端发给服务器的数据,例如要上传的数据.
请求项之间\r\n,最后一个请求项\r\n\r\n两个.
// 发送内容给服务器
// NSString *msg = @"如何成为牛逼的程序员";
// 协议头://主机地址/路径
// http://localhost/aaa.txt
/ *GET:请求方式 /:路径 HTTP:协议头 */
主机地址:Host:m.qidian.com
NSString *request = @"GET / HTTP/1.1\r\n"
"Host:m.qidian.com\r\n"
"Connection:Close\r\n"
"User-Agent:iPhone AppleWebKit\r\n\r\n";
NSString *resultStr = [self sendAndRecv:request];
理解获取数据的意思
发送请求,服务器返回实体内容给我们.这就是我们需要的数据.