ios中的socket完全使用的是c语言编写,这只是socket客户端代码,由于使用的是mac电脑,socket服务器端测试代码就不需要写了,直接使用mac自带的服务器监听命令nc -lk port(端口)就可以了。
ios socket客户端测试demo如下,本人将c语言的socket代码写在了ios项目中的viewDidLoad初始化方法里面了,你也可以写在c语言或者object-c的main函数中。
#import "ViewController.h" #import <sys/socket.h> #import <netinet/in.h> #import <arpa/inet.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //-----以下为socket代码----- //1.创建客户端socket //参数1:遵守的ip协议类型AF_INET Ipv4,AF_INET6 IPV6 //参数2:端口类型SOCK_STREAM TCP,SOCK_DGRAM UDP //参数3:选择的协议类型,一般为0 //返回值:如果>0则成功 int socketNumber = socket(AF_INET, SOCK_STREAM, 0); //2.创建服务器端socket struct sockaddr_in serverAddress; //设置ip协议为ipv4 serverAddress.sin_family = AF_INET; //服务器端socket的ip地址 serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1"); //设置服务器端口 serverAddress.sin_port = htons(12345); //3.连接两个socket //参数1:客户端socket //参数2:服务器端socket/结构体 //参数3:第2个参数的长度 //返回值!=0连接失败 //如果要连接成功,必须实时监测服务器的端口nc -lk 12345 int conn = connect(socketNumber, (const struct sockaddr*)&serverAddress, sizeof(serverAddress)); NSLog(@"%d",conn); //4.发送信息给服务器 //参数1:客户端socket //参数2:void *传递给服务器的数据 //参数3:size_t传递给服务器的长度 //参数4:传0等待服务器响应数据 NSString *msg = @"hello socket"; send(socketNumber, msg.UTF8String, strlen(msg.UTF8String), 0); //5.接收服务器返回的数据 //参数1:服务器确定返回给哪一个客户端数据 //参数2:void *接受服务器返回的地址(区域) //参数3:size_t接收地址的长度 //参数4:等待服务器返回数据 //返回值:就是服务器返回的数据长度 ssize_t buffer[1024]; size_t length = recv(socketNumber, buffer, sizeof(buffer), 0); //获取服务器返回的数据(从buffer中获取需要的数据) //根据二进制数据,拼接字符串 NSString *returnMsg = [[NSString alloc] initWithBytes:buffer length:length encoding:NSUTF8StringEncoding]; NSLog(@"returnMsg:%@",returnMsg); //服务器返回数据之后关闭socket close(socketNumber); } @end
然后我们打开mac的终端工具,输入nc -lk 12345这个命令,就可以启动mac自带的服务器监听工具了,这个时候运行我们的ios项目,就可以在mac终端中输出“hello socket”。