一、IP地址
图一二、端口号
图二三、网络模型
图三TCP/IP网络模型
图四 图五传输协议TCP\UDP
图六
四、Socket 详情可去此处
图七Socket通信过程
图八-
Socket在应用层和传输层之间
通信过程
Socket创建
- 1.导入头文件:
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
- 2.代码
//1.创建Socket
//第一个参数是 domain 协议蔟 指定IPv4
//第二个参数是 type socket的类型 流socket -- 数据报socket
//第三个参数是 protocol 协议
//返回值 如果创建成功,返回的事socket的描述符,失败则为-1
int clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//2.连接服务器
//第一个参数 套接字描述符
//第二个参数 只想数据结构sockaddr的指针,其中包括 目前端口和IP地址
//第三个参数 参数二sockaddr的长度,可以通过sizeof(struct sockaddr)获得
//返回值 成功返回0,失败返回非0,错误码GetLastError()
struct sockaddr_in addr;
addr.sin_family = AF_INET;//IPv4
addr.sin_addr.s_addr = inet_addr("127.0.0.1");//IP
addr.sin_port = htons(12345);//端口
int result = connect(clientSocket, (const struct sockaddr *)&addr, sizeof(addr));
//result == 0 ? NSLog(@"成功") : NSLog(@"失败");
//3.向服务器发送数据
//成功则返回世纪传送出去的字符数,失败返回-1
const char *msg = "Hello World";
ssize_t sendCount = send(clientSocket, msg, strlen(msg), 0);
NSLog(@"发送的字节数 %zd",sendCount);
//4.接收服务器发送的数据
//返回的是实际接收的字节个数
uint8_t buffer[1024];
ssize_t recvCount = recv(clientSocket, buffer, sizeof(buffer), 0);
NSLog(@"接收的字节数 %zd",recvCount);
//把字节数组转换成字符串
NSData *data = [NSData dataWithBytes:buffer length:recvCount];
NSString *recvMsg = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"接收的信息:%@",recvMsg);
//5.关闭连接
close(clientSocket);
网友评论