April 6, 2012 分类: ASM/C/C++, Java     作者: hoverlees     留言: 3

本来想玩玩android的网络应用,特地买了一个htc G12手机来做实验,首先实验了p2p,发现不同的网络运营商根本打不通(为此,我还特地分析了QQ 的解决方式,他们也是走TCP的),后来想想p2p实现在这种场合根本没有太多意义,自已要实现数据包的顺序,校验,还不如用tcp.后来就做成了服务器转发方式。

可惜,我的htc被小偷偷了,准备还是用iphone 4s了,所以这个代码也不打算写了,有兴趣的人可以拿去参考参考。

服务器使用的还是java的nio方式,心得就是调用方式是和epoll最像,epoll的方式是在发送数据前注册EPOLLOUT事件,然后在有缓冲区可以发送数据时就能收到这个事件,在这个事件收到时进行数据包发送,当数据包发送完成后再取消注册EPOLLOUT事件即可,这样就不用判断是否有缓冲可以发送数据了。java nio的select 就相于epoll_wait。

相比于 windows上的io completion port方式,不同的就是数据发送。iocp发送数据是不管怎样,先把你的数据通过WSASend加到发送队列,然后内核会帮你按顺序发送这个队列,当发送完成后会通知应用程序。他们的差别在于通知是一先一后的关系,但都是最高效的。所以我猜想windows平台上的java nio实现就是只要你注册了监听写事件时就会循环收到写事件而不管缓冲区是否为空。

这是一个eclipse工程,com.hoverlees下的为android客户端程序,com.astream是拿udp做p2p的实验程序.com.astream.Server为服务器程序,Client.java为命令行客户端。

已实现的功能:

1.查看用户列表

2.选择用户进行聊天

3.可发送文本,图片,视频,语音

4.可发送离线文件。

界面比较丑,因为是做着玩的。

整个工程下载

我来留个言

您的电子邮箱我一定会保密的哦!

昵称

邮箱

评论内容

快速链接
推荐文章
推荐标签
最新图片