dispatch_sync(dispatch_get_global_queue(0, 0), ^{ // 处理耗时操作的代码块... // 创建socket /* 1.AF_INET: ipv4 执行ip协议的版本 2.SOCK_STREAM:指定Socket类型,面向连接的流式socket 传输层的协议 3.IPPROTO_TCP:指定协议。 IPPROTO_TCP 传输方式TCP传输协议 返回值 大于0 创建成功 */ _clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 建立连接(与服务器) /* 终端里面 命令模拟服务器 netcat nc -lk 12345 参数一:套接字描述符 参数二:指向数据结构sockaddr的指针,其中包括目的端口和IP地址 参数三:参数二sockaddr的长度,可以通过sizeof(struct sockaddr)获得 返回值 int -1失败 0 成功 */ struct sockaddr_in addr; /* 填写sockaddr_in结构*/ addr.sin_family = AF_INET; addr.sin_port=htons(8080); addr.sin_addr.s_addr = inet_addr("192.168.0.99"); int connectResult = connect( _clientSocket, (const struct sockaddr *)&addr, sizeof(addr)); // 发送数据(到服务器) /* 第一个参数指定发送端套接字描述符; 第二个参数指明一个存放应用程式要发送数据的缓冲区; 第三个参数指明实际要发送的数据的字符数; 第四个参数一般置0。 成功则返回实际传送出去的字符数,失败返回-1, */ char * str = "itcast"; ssize_t sendLen = send( _clientSocket, str, strlen(str), 0); // 接送数据(从服务器) /* 第一个参数socket 第二个参数存放数据的缓冲区 第三个参数缓冲区长度。 第四个参数指定调用方式,一般置0 返回值 接收成功的字符数 */ char *buf[1024]; ssize_t recvLen = recv( _clientSocket, buf, sizeof(buf), 0); NSLog(@"---->%ld",recvLen); }); // [self test]; }