一、
在前面的一节,我们学习了iOS网络相关的知识,并利用scoket搭建了一个简易的响应端(这里我都不好意思称他为服务器端...?️),这一节我们将继续完成客户端的搭建工作。
二、socket搭建客户端
先来看看搭建客户端的流程:
上图右边的部分就是搭建TCP客户端的流程了
1、首先还是创建socket,这里是客户端的socket
//创建socket
int clientScket = socket(PF_INET, SOCK_STREAM, 0);
if(clientScket == -1){
NSLog(@"创建socket失败");
}else{
NSLog(@"创建socket成功");
}
具体参数已在前一节学习过了,这里就不再赘述。
2、发起连接
//发起连接
struct sockaddr_in addr;
addr.sin_family = AF_INET;//ipv4
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(1234);//绑定端口号
int result = connect(clientScket,(const struct sockaddr *)&addr, sizeof(addr));
if(result == -1){
NSLog(@"连接出错");
}else{
NSLog(@"连接成功");
}
服务器端的第二步操作是绑定IP地址和端口号,所使用的函数是 bind()函数,而客户端的第二步操作则是连接服务器端,所使用的函数是connect(),参数同客户端的bind()函数参数类型相同,参数意义也相同,需要注意的是这里的IP地址我们写的是本机回环地址,因为是本机利用socket去请求服务端。由于我们在服务端绑定的端口号是 1234,所以这里绑定的端口号也应该是1234。
3、发送数据
char *msg = "hello world";
ssize_t leng = send(clientScket,msg,strlen(msg),0);
NSLog(@"成功发送%zd字节",leng);
发送数据给客户端,这里使用的也是send()函数,参数依次为 客户端的scoket,发送的数据,数据的长度,0。返回值是 ssize_t类型的值,表示所发送数据的字节数。
4、接收数据
char buff[1024];
size_t length = recv(clientScket, buff, 1024, 0);
NSLog(@"接收了%zu个字节:%s",length,buff);
接受数据使用recv()函数接收,参数和服务器端的相同,这里不再赘述。
三、最终效果(最终效果需要两个端同时运行??)
服务端:
客户端: