1)服务器监听;2)客户端请求;3)连接确认(具体详情可以见百度百科,我在这也就不多说了)。
2.socket通信机制:
服务器端
一、创建服务器套接字(CREATE)。
二、服务器套接字进行信息绑定(BIND),并开始监听连接(LISTEN)。
三、接受来自客户端的连接请求(ACCEPT),并创建接收进程。
四、开始数据传输(SEND、RECEIVE)。
五、关闭套接字(CLOSESOCKET)。
客户机端
一、创建客户机套接字(CREATE)。
二、与远程服务器进行连接(CONNECT),如被接受则创建接收进程。
三、开始数据传输(SEND、RECEIVE)。
四、关闭套接字(CLOSESOCKET)。
具体在Java中的实现是:
服务器端:
1)创建ServerSocket,需要使用端口号进行标识,以便客户端进行连接。
如:ServerSocket serverSocket = new ServerSocket(9999)
2)创建Socket获取连接
如: Socket socket = serverSocket.accept()
3)便可以进行通信内容传输了。
客户端:
1)创建Socket,进行与服务器连接,需要填写服务器ip,以及服务器的端口号
如:Socket socket = new Socket("127.0.0.1", 9999)
2)进行通信内容的传输。
以上只是一个简单的socket通信案例,想要了解的可以进入该链接下载:http://download.csdn.NET/detail/xia09222826/8244423
3.利用socket通信进行服务器端到客户端的消息推送的思路:
客户端登录后发送一个消息给服务器端,用一个标识作为用户客户端程序关闭后服务器端是否推送消息给客户端,如果有则进行消息推送,如果没有则不进行消息推送,而当程序运行时就是一般的socket通信,也就是服务器端写一条消息推送给客户端,客户端便可以接收,并在消息栏上显示,点击消息栏进行相应的界面即可。
服务器就不多说了,方法是差不多的。
客户端:
需要使用Service来进行监听:
[java] view plain copy
print?
public class PushService extends Service {
private PushClient mClient
private Handler mHandler
@Override
public IBinder onBind(Intent intent) {
return null
}
@Override
public void onCreate() {
super.onCreate()
initHandler()
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mClient = new PushClient(new InetSocketAddress("192.168.4.101", 9999),
mHandler)
mClient.start()
return super.onStartCommand(intent, flags, startId)
}
@Override
public void onDestroy() {
if (mClient != null) {
mClient.disConnect()
}
super.onDestroy()
}
/**
* 初始化Handler
*/
private void initHandler() {
mHandler = new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case Const.PUSH_MSG:
String pushMsg = msg.obj.toString()
showNotification(pushMsg)
break
default:
break
}
return false
}
})
}
/**
*
* 在状态栏显示通知
*/
@SuppressWarnings("deprecation")
private void showNotification(String msg) {
// 创建一个NotificationManager的引用
NotificationManager notificationManager = (NotificationManager) getSystemService(android.content.Context.NOTIFICATION_SERVICE)
// 定义Notification的各种属性
Notification notification = new Notification(R.drawable.ic_launcher,
msg, System.currentTimeMillis())
// FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉
// FLAG_NO_CLEAR 该通知不能被状态栏的清除按钮给清除掉
// FLAG_ONGOING_EVENT 通知放置在正在运行
// FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应
notification.flags |= Notification.FLAG_AUTO_CANCEL// 表明在点击了通知栏中的"清除通知"后,此通知不清除,经常与FLAG_ONGOING_EVENT一起使用
// DEFAULT_ALL 使用所有默认值,比如声音,震动,闪屏等等
// DEFAULT_LIGHTS 使用默认闪光提示
// DEFAULT_SOUND 使用默认提示声音
// DEFAULT_VIBRATE 使用默认手机震动,需加上<uses-permission
// android:name="android.permission.VIBRATE" />权限
notification.defaults = Notification.DEFAULT_SOUND
// 设置通知的事件消息
CharSequence contentTitle = msg// 通知栏标题
CharSequence contentText = msg// 通知栏内容
Intent notificationIntent = new Intent(this, TestActivity.class)// 点击该通知后要跳转的Activity
PendingIntent contentItent = PendingIntent.getActivity(this, 0,
notificationIntent, 0)
notification.setLatestEventInfo(this, contentTitle, contentText,
contentItent)
// 把Notification传递给NotificationManager
notificationManager.notify(0, notification)
}
这样就可以在将接收到的消息在消息栏上显示了,点击后便可以进入相应的界面了。
ios可以使用socket,但是要想做到远程推送可能还是需要apns机制,因为应用退到后台的时候只有apns能处理苹果服务器推送来的消息。iOS使用Socket的常用方式有如下: (1)BSD Socket:是UNIX系统中通用的网络接口,基于C语言,比较底层(2)CF Socket:苹果官方提供,来自于CoreFoundation框架
(3)AsyncSocket:对BSD Socket的封装,OC语言
(4)ysocket:对BSD Socket的封装,Swift语言
SOCKET原理:套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。是网络通信过程中端点的抽象表示,包含进行。
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。建立连接时所需的寻址信息为IP地址和端口号。
进行远程消息推送可以了解一下极光,极光就挺不错的。JPush iOS 推送相比直接向 APNs 推送减少开发及维护成本:应用开发者不需要去开发维护自己的推送服务器与 APNs 对接。集成了 JPush iOS SDK 后不必自己维护更新 device token。
通过 JPush 的 Web Portal 直接推送,也可以调用 JPush 的 HTTP 协议 API 来完成,开发工作量大大减少。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)