iOS 使用 socket 实现即时通信示例(非第三方库)

2020-01-18 20:38:16王旭

其实写这个socket一开始我是拒绝的。

因为大家学C 语言和linux基础时肯定都有接触,客户端和服务端的通信也都了解过,加上现在很多开放的第三方库都不需要我们来操作底层的通信。

但是!还是想写。底层的东西最好了解下。

效果

ios,socket即时通讯,即时通信,ios的socket即时通讯

由于5M的上传限制GIF可能看不清 我再截两张图吧

ios,socket即时通讯,即时通信,ios的socket即时通讯

服务器

ios,socket即时通讯,即时通信,ios的socket即时通讯

客户端A

ios,socket即时通讯,即时通信,ios的socket即时通讯

客户端B

模型图

ios,socket即时通讯,即时通信,ios的socket即时通讯

分析

由上图可以了解到服务器和客户端需要做哪些工作

服务器

抽象一点分为:

1.创建线程等待接收客户端的连接

2.接收并解析客户端发来的消息

3.给客户端发送消息

具体一点:

1.创建socket. 绑定端口.开始监听.

2.创建线程.等待接收客户端连接.

3.接收客户端发来的消息

4.解析消息内容

a.设置用户名

b.发送消息给指定客户端

客户端

抽象一点分为:

1.连接服务器

2.给服务器发送消息

3.接收服务器消息

4.解析消息内容

具体一点:

1.创建socket.绑定端口.连接服务器

2.发送消息

a.设置用户名

b.给指定用户发消息:按服务器格式拼接字符串

3.接收消息

a.普通消息

b.用户列表:保存至用户列表

UI方面

服务器:其实不用什么UI放个控件展示下日志就是了

客户端:比较简单,一个俗套聊天室的界面,直接storyboard里拖拖控件设置约束了

DEMO而已别太当真

代码部分

服务器

要使用scoket需要引用这三个头文件


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

只有一个model,用来绑定用户名和socket


@interface ClientModel : NSObject
@property(nonatomic,assign)int clientSocket;
@property(nonatomic,copy)NSString *clientName;
@end