美文网首页
iOS Socket

iOS Socket

作者: 索性流年 | 来源:发表于2017-10-10 17:58 被阅读0次

Socket(套接字)是通讯协议.通过IP地址,和端口号进行锁定传输数据.Socket支持TCP/UDP协议,一个是安全传输三次握手机制(省略)一个是分发数据包,不保证安全(省略),它是基于C语言的一套网络通讯协议.

Socket分为长连接和短连接.

1.长连接:就是始终和服务器保持连接,直至你不在需要和服务器传输数据(特点是:效率高,但是消耗资源多)
2.短连接:就是发送一次数据就将Socket关闭,再次发送再请求连接!(特点.效率稍底,但是消耗资源少.)

以下是实现简单通讯的源码.

#import<sys/socket.h>
#import<netinet/in.h>
#import<arpa/inet.h>

//    1.创建socket
/*
协议域 AF_INET  (IPv4的宏,IPv6是AF_INET6)
类型 SOCK_STREAM/SOCK_DGRAM(是流数据,还是报文)
IPPROT_TCP,如果传入0或根据前一个参数自动选择
*/
int  clintSocket =  socket(AF_INET  , SOCK_STREAM, 0);



//    2.链接服务器
/*
客户端的socket
serv_addr:套接字想要连接的主机地址和端口号。
addrlen:serv_addr缓冲区的长度。
*/
struct sockaddr_in servAddr;
//    定义协议域
servAddr.sin_family = AF_INET;
//    定义端口可以在终端上监听端口(nc -lk 54431)
servAddr.sin_port = htons((short)54431);
//    设置IP地址,链接失败,很有可能是这个问题.
servAddr.sin_addr.s_addr = inet_addr("192.168.2.1");
int connetRect = connect(clintSocket, (const struct sockaddr *)&servAddr, sizeof(servAddr));
if (connetRect ==0) {
    NSLog(@"链接成功");
}else{
    NSLog(@"链接失败%d",connetRect);
    return;
}

//3.接收请求
/*
客户端的socket
serv_addr:套接字想要连接的主机地址和端口号。
addrlen:serv_addr缓冲区的长度。
*/
unsigned int nAddrlen = sizeof(servAddr);
int sClient = accept(clintSocket, (struct sockaddr *)&servAddr,&nAddrlen);

//    4.发送数据
/* 
客户端的socket
发送内容的地址
发送内容的长度
0
*/
NSString * sendMy = @"你好";
ssize_t senlen =  send( clintSocket, sendMy.UTF8String, strlen(sendMy.UTF8String), 0);
NSLog(@"发送了%ld个",senlen);

//    5.从服务器接受数据
/*
客户端socket
接受内容缓存区
接受内容长度
0
*/
uint8_t buffMy[1024];
ssize_t reclen =  recv(sockMy, buffMy, sizeof(buffMy), 0);
NSString *str = [NSString stringWithCString:buffMy encoding:NSUTF8StringEncoding];
NSLog(@"接受:%@ %ld长度",str,reclen);

//   6.关闭
close(sockMy);
//    6.关闭socket
//    close(clintSocket);
能力有限,只能写这么多.有什么问题欢迎大家留言指正,我看到一定回复.感谢!!!!!!!

相关文章

网友评论

      本文标题:iOS Socket

      本文链接:https://www.haomeiwen.com/subject/qqlbyxtx.html