1.初始化socket
// 1.创建一个socket
/*
domain: 协议域 IPV4 ,IPV6
type: socket 类型 SOCKET_STREAM(TCP) / SOCK_DGRAM(UDP)
protocol: TCP ? UDP ? 0 ,自动根据第二个参数来决定合适的协议
*/
int cr_Socket = socket(AF_INET, SOCK_STREAM, 0);
2.连接服务器
// 2.连接服务器
struct sockaddr_in cr_sever_Addr;
cr_sever_Addr.sin_family = AF_INET;
// 端口
cr_sever_Addr.sin_port = htons(8866);
// ip地址
cr_sever_Addr.sin_addr.s_addr = inet_addr("127.0.0.1");
/*
参数1:客户端的socket
参数2:指向数据结构sockaddr_in 的指针,其中包括端口、IP地址
参数3:结构体数据的长度
*/
int connectedResult = connect(cr_Socket, (const struct sockaddr * )&cr_sever_Addr, sizeof(cr_sever_Addr));
if (connectedResult == 0) {
NSLog(@"连接成功!");
} else {
NSLog(@"连接失败:%d",connectedResult);
}
while (connectedResult == 0) {
//从服务器去接收数据
}
3.发送数据给服务器
// 3.发送数据给服务器
/*
参数1:客户端的socket
参数2:发送内容的地址
参数3:发送内容的长度
参数4:发送方式的标志,一般都0
*/
NSString *sendMsg = @"Hello word!";
ssize_t sendLen = send(_cr_Socket, sendMsg.UTF8String, strlen(sendMsg.UTF8String), 0);
NSLog(@"发送内容是:%@, 共%ld字符",sendMsg, sendLen);
4.从服务器去接收数据
// 4.从服务器去接收数据
uint8_t buffer[1024];
/*
参数1:客户端的socket
参数2:接收内容的缓存区地址
参数3:接收内容的长度
参数4:接收的方式,0,表示阻塞,必须等待服务器返回数据
返回值:成功:读入的字节数据
失败:
*/
ssize_t recvLen = recv(_cr_Socket, buffer, sizeof(buffer), 0);
NSData *data = [NSData dataWithBytes:buffer length:recvLen];
NSString *recStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"接收了%ld字节数据",recvLen);
NSLog(@"%@",recStr);