标签:
传递信息时,由上到下再由下到上分别是封包和解包。
1 // 1. 创建 socket 2 /** 3 参数 4 5 domain: 协议域,AF_INET->IPV4 6 type: Socket 类型,SOCK_STREAM(TCP)/SOCK_DGRAM(报文 UDP) 7 protocol: IPPROTO_TCP,如果传入0,会自动根据第个参数,选择合适的协议 8 9 返回值 10 socket > 0 就成功 11 */ 12 int clientSocket = socket(AF_INET, SOCK_STREAM, 0); 13 14 // 2. 连接到服务器 15 /** 16 参数 17 1> 客户端socket 18 2> 服务器地址结构体指针 19 3> 结构体数据长度 20 返回值 21 0 成功/其他 错误代号 22 */ 23 struct sockaddr_in serverAddr; 24 serverAddr.sin_family = AF_INET; 25 // 端口 26 serverAddr.sin_port = htons(12345); // 终端输入 $nc -lk 12345才能连接成功(打开本机12345端口,并持续监听) 27 // 地址 inet_addr 函数,可以将 ip 地址转换成一个数字 28 serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 29 // 在 C 语言开发中,经常传递一个数据结构的指针同时,需要指定该数据结构的长度 30 int connResult = connect(clientSocket, (const struct sockaddr *)&serverAddr, sizeof(serverAddr)); 31 if (connResult == 0) { 32 NSLog(@"连接成功"); 33 } else { 34 NSLog(@"连接失败-%d",connResult); 35 } 36 37 // 3. 发送数据给服务器 38 /** 39 参数 40 1> 客户端socket 41 2> 发送内容地址 42 3> 发送内容长度 43 4> 发送方式标志,一般为0 44 返回值 45 如果成功,则返回发送的字节数,失败则返回SOCKET_ERROR 46 */ 47 NSString *sendMsg = @"are you ok?"; 48 ssize_t sendLength = send(clientSocket, sendMsg.UTF8String, strlen(sendMsg.UTF8String), 0); 49 NSLog(@"发送了%ld个字节",sendLength); 50 51 // 4. 从服务器接收数据 52 /** 53 参数 54 1> socket 55 2> 接收数据的缓冲区地址,需要提前准备 56 3> 缓冲区长度 57 4> 标记,0,阻塞式 58 59 返回值 60 如果成功,则返回接收到的字节数 61 */ 62 uint8_t buffer[1024]; // 要把空间准备出来 63 ssize_t recvLength = recv(clientSocket, buffer, sizeof(buffer), 0); 64 NSLog(@"接收了%ld个字节",recvLength); 65 // 获取服务器返回的数据,从缓冲区中读取 recvLen 个字节! 66 NSData *data = [NSData dataWithBytes:buffer length:recvLength]; 67 // 转换成字符串 68 NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 69 NSLog(@"%@",str); 70 71 // 5、关闭 72 /** 73 长连接:连上就一直聊!通常用于 QQ,即时通讯,效率高! 74 短连接:通讯一次,马上断开,下一次再次建立连接,效率低 75 */ 76 close(clientSocket);
1、Netcat
标签:
原文地址:http://www.cnblogs.com/yaann/p/4960049.html