iOS Socket通信编程

iOS Socket通信编程

最近想在两个project进行一些数据的交换,以达到模拟服务器对应用程序进行操控的效果,所以想到了利用socket双向通信链接,在此对研究结果记录一下。


Socket概念

socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接,UDP连接同理。


客户端

创建Socket
//函数
int socket(int domain, int type, int protocol);
//实例
int socketClient = socket(AF_INET, SOCK_STREAM, 0);
//返回一个代表此Socket的描述符

int domain:表示所使用的协议族,通常为PF_INET或者是AF_INET。
int type:指定socket的类型,SOCK_STREAM(TCP类型)或SOCK_DGRAM(UDP类型)。
int protocol:表示允许程序使用底层协议,通常为0。

连接服务器:
//函数
int connect (int sockfd,struct sockaddr * serv_addr,int addrlen);
//实例
int iTmp = connect(socketServer, (struct sockaddr *) &socketParameters, sizeof(socketParameters)); 
//返回一个代表连接成功与否的整型,成功则返回0,失败则返回错误码

int sockfd:表示标识客户端的套接字。
struct sockaddr * serv_addr:套接字想要连接的服务端的相关多个信息,用结构体来表示。
int addrlen:服务端信息的长度。

接受数据:
//函数
int recv( _In_ SOCKET s, _Out_ char *buf, _In_ int len, _In_ int flags);
//实例
int length = recv(socketServer, recvbuffer, BUFFER_SIZE,0); 
//返回一个代表接收到的实际数据的长度,一定需要比缓冲区预留的长度小

_In_ SOCKET s:同样是客户端的套接字。
_Out_ char *buf:存放接收到的数据的缓冲区。
int addrlen:接受数据的缓冲区的长度。
_In_ int flags:一般置为0即可。

发送数据:
//函数
int send( SOCKET s, const char FAR *buf, int len, int flags ); 
//实例
int length = send(socketServer, "3", 1, 0);

SOCKET s:套接字描述符。
const char FAR *buf:存放发送的数据的缓冲区。
int len:发送数据的长度。
int flags:一般置为0即可。

关闭Socket:
 close(socketServer);

服务器端

创建Socket:

函数与客户端一样在此不在赘述。

绑定Socket:
//函数
int bind(int sockfd, struct sockaddr * my_addr, int addrlen);
//实例
bind(g_socketServer,(struct sockaddr*)&serverAddr,sizeof(serverAddr));

g_socketServer:同样是套接字描述符。
(struct sockaddr*)&serverAddr:需要一个结构体描述套接字的信息
(struct sockaddr*)&serverAddr:其结构体的结构长度

监听Socket:
//函数
int listen(int s, int backlog);
//实例
listen(g_socketServer, LENGTH_OF_LISTEN_QUEUE);

g_socketServer:套接字描述符。
int backlog:等待连接队列的最大长度。

接受数据:函数与客户端一样在此不在赘述。
发送数据:函数与客户端一样在此不在赘述。
关闭Socket:函数与客户端一样在此不在赘述。

例子源码:https://github.com/NowOrNeverDG/Socket

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值