如下:
该软件采用P2P方式,各个客户端之间直接发消息进行会话聊天,服务器在其中只扮演协调者的角色(混合型P2P)。
1.会话流程设计
当一个新用户通过自己的客户端登陆系统后,从服务器获取当前在线的用户信息列表,列表信息包括了系统中每个用户的地址。用户就可以开始独立工作,自主地向其他用户发送消息,而不经过服务器。每当有新用户加入或在线用户退出时,服务器都会及时发消息通知系统中的所有其他用户,以便它们实时地更新用户信息列表。
按照上述思路,设计系统会话流程如下:
(1)用户通过客户端进入系统,向服务器发出消息,请求登陆。
(2)服务器收到请求后,向客户端返回应答消息,表示同意接受该用户加入,并顺带将自己服务线程所在的监听端口号告诉用户。
(3)客户端按照服务器应答中给出的端口号与服务器建立稳定的连接。
(4)服务器通过该连接将当前在线用户的列表信息传给新加入的客户端。
(5)客户端获得了在线用户列表,就可以独立自主地与在线的其他用户通信了。
(6)当用户退出系统时要及时地通知服务器。
2.用户管理
系统中,无论是服务器还是客户端都保存一份在线用户列表,客户端的用户表在一开始登陆时从服务器索取获得。在程序运行的过程中,服务器负责实时地将系统内用户的变动情况及时地通知在线的每个成员用户。
新用户登录时,服务器将用户表传给他,同时向系统内每个成员广播“login”消息,各成员收到后更新自己的用户表。
同样,在有用户退出系统时,服务器也会及时地将这一消息传给各个用户,当然这也就要求每个用户在自己想要退出之前,必须要先告诉服务器。
3.协议设计
3.1客户端与服务器会话
(1)登陆过程。
客户端用匿名UDP向服务器发送消息:
login,username,localIPEndPoint
消息内容包括3个字段,各字段之间用“,”分隔:“login”表示请求登陆;“username”为用户名;“localIPEndPoint”是客户端本地地址。
服务器收到后以匿名UDP返回如下消息:
Accept,port
其中,“Accept”表示服务器接受了请求;“port”是服务所在端口,服务线程在这个端口上监听可能的客户连接,该连接使用同步的TCP。
连上服务器,获取用户列表:
客户端从上一会话的“port”字段的值服务所在端口,于是向端口发起TCP连接,向服务器索取在线的用户列表,服务器接受连接后将用户列别传输给客户端。
用户列表格式如下:
username1,IPEndPoint1;username2,IPEndPoint2;.....end
username1,username2.....为用户名,IPEndPoint1,IPEndPoint2....为它们对应的端点。每个用户的信息都有个“用户名+端点”组成,用户信息之间以“;”隔开,整个用户列表以“end”结尾。
3.1服务器协调管理用户
(1)新用户加入通知。
由于系统中已存在的每个用户都有一份当前用户表,因此当有新成员加入时,服务器无需重复给系统中的每个成员再传送用户表,只要将新加入成员的信息告诉系统内的其他用户,再由他们各自更新自己的用户表就行了。
服务器向系统内用户广播发送如下消息:
端点字段写为“remoteIPEndPoint”,表示是远程某个用户终端登陆了,本地客户线程据此更新用户列表。其实,在这个过程中,服务器只是将受到的“login”消息简单地转发而已。
(2)用户退出。
与新成员加入时一样,服务器将用户退出的消息直接进行广播转发:
logout,username,remoteIPEndPoint
其中,“remoteIPEndPoint”为退出系统的远程用户终端的端点地址。
3.1用户终端之间聊天
用户聊天时,他们各自的客户端之间是以P2P方式工作的,彼此地位对等,独立,不与服务器发生直接联系。
4.系统实现
4.1服务线程
系统运行后,先有服务器启动服务线程,只需单击“启动”按钮即可。
即时聊天软件可以在两名或多名用户之间传递即时消息的网络软件,大部分的即时聊天软件都可以显示联络人名单,并能显示联络人是否在线。使用者发出的每一句话都回即时显示在双方的萤幕上。
如何在Android系统下开发一个基于WiFi的P2P聊天软件主要是客户端连接服务器端,如果一对一就两个相连,多对多的话可能需要搭一个服务器处理
其实这个网络上已经很多相关例程,可以百度搜索下,推荐csdn或者pudn去看一下,内容挺详细的。
等答案! Android4.0开始只是Wifip2p了,可以利用这个来做一个P2P聊天。
基于C++的P2P聊天系统 源码源码肯定是没有。但是是可以的,但必须输入对方的IP地址,或者你这样,建立一个服务器,启动服务器,服务器保存着客户的ip列表,客户端启动后,把这些ip分给客户端,客户端聊天直接发送消息至另一个客户端,不经过服务器,这不就完事了。
如何在Android上实现P2P文件共享系统
通过对数据库的索引,我们还为您准备了:
Android P2P 如何实现?
问:请教大虾们:两台gphone间(由程序控制)交流,除了透过短信外,是否有...
答:谢谢各位大虾的帮助。我买了两本介绍android的书都没有看到socket,所以发贴求助。知道可以用socket太好了。谢谢!
===========================================
基于java的p2p实现文件共享和传输
问:我想学学p2p,本人学.NET的,可是始终都没头绪,希望哪位大虾能给个完整...
答:C++ Socket网络编程大全 1.简单服务器 #include #pragma ment(lib,"WS2_32.lib") WSADATA sServer,sClientchat buf[1024]int retValif(WSAStartup(MAKEWORD(2,2),&wsd)!=0) { return -1失败 } sServer=socket(AF_INET,SOCK_STRE...
===========================================
p2p文件共享方法或软件
问:我要共享一大堆无版权视频、 、我有两个国外VPS、但是我想用p2p直接把视...
答:直接用BT呢?自己做个种子,然后传给别人
===========================================
感觉要root获得最高权限,类似电脑的共享。然后要在同一局域网,比如一个无线路由器。
如何在源码环境下开发 android系统app首先你得看得懂那些源码是干什么用的,然后把源码上的不完善的功能或者不适合你的功能做修改
建立一个P2P平台软件开发主要需要有五大步骤:1、明确自己的目标,搜集相关资料。建设p2p平台的目标已经确定,我们则需要搜集相关的资料。
2、制定p2p平台程序开发计划。如迪蒙系统可支持P2P、P2B、P2C及P2N等多种业务模式,并在这一阶段需要制定出整个p2p平台开发所需要的人力、物力、费用以及时间等等,还需要制定出整个p2p平台程序的架构图,模块,数据库的制作等等。
3、根据计划,开始制作p2p平台系统。前台页面设计,后台程序编程,数据库表格的设计等等。
4、测试p2p平台程序。在这一步最好用专业的测试团队来进行测试,前提是测试人员没有参与p2p平台制作开发阶段。
5、上传与维护。p2p平台开发完成之后,就可以上传到互联网上了,网站的维护就比较重要了。同时,互联网是在不断进步的,不断更新的,所以p2p平台系统的二次开发也很重要,在第一次开发阶段,记得不要把代码写死了,否则第二次开发就很困难了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)