P2P平台基本功能汇总
- 格式:doc
- 大小:27.00 KB
- 文档页数:3
P2P理财平台运作的十大模式
1.借贷撮合:P2P理财平台的最基本模式,平台作为中介,将投资者
与借款人撮合起来,实现借贷交易。
2.全程撮合:除了撮合借款人与投资者之间的借贷交易外,P2P理财
平台还提供一系列的服务,如风控审核、资金担保等,全程参与整个借贷
过程。
3.托管模式:平台作为资金托管方,接收投资人的资金,将其按照投
资者的意愿,进行借贷出借。
平台通常会将资金进行风险分散,降低投资
者的风险。
4.外包模式:平台将自己的风控审核、催收等业务委托给专业的机构
或公司来处理,自己则只负责撮合借贷交易。
5.或有模式:P2P理财平台作为一种新型的金融机构,通常不存在事
先存在的借贷关系,而是根据投资者和借款人的需求,灵活地进行撮合。
6.公益模式:一些P2P理财平台致力于公益事业,在撮合借贷交易的
同时,为社会公益事业提供支持。
7.线上线下相结合模式:P2P理财平台通过线上平台进行撮合交易,
但同时也设立线下机构,提供面对面的服务,以提升用户体验和安全性。
8.民间模式:有些P2P理财平台更像是一种民间借贷的扩展,投资者
和借款人之间往往有熟人关系,平台只是提供撮合服务。
9.垂直细分模式:一些P2P理财平台专注于其中一特定领域,如房贷、汽车贷等,通过专业化服务,提供更好的投资机会。
10.跨境模式:随着经济全球化的发展,一些P2P理财平台开始涉足
跨境借贷,将海外的投资者与借款人进行撮合。
这些模式不同程度地改进和创新了传统金融机构的业务模式,提供了
更加方便、快捷和灵活的借贷服务,但也存在着一些安全风险和监管问题,需要投资者和监管部门的高度重视。
p2p的功能P2P(点对点)网络是一种基于对等连接的网络系统,其中所有计算机都充当客户端和服务器的角色,共享和分发资源。
与传统的中心化网络相比,P2P网络拥有独特的功能和优势。
下面将介绍P2P网络的功能。
首先,P2P网络具有分布式的特点。
在传统的中心化网络中,中央服务器负责管理和分发资源,当服务器宕机或故障时,整个网络会陷入瘫痪。
而在P2P网络中,每个节点都存储一部分资源,当一个节点离线时,其他节点仍然可以继续共享和分发资源,网络的稳定性更高。
其次,P2P网络具有高效的资源共享和分发功能。
在P2P网络中,每个节点都可以共享和分发自己的资源,而不受中心服务器的限制。
这使得用户能够更快地获取所需的资源,例如文件、音乐、视频等。
同时,P2P网络也可以利用节点之间的带宽和存储空间,提高资源的可用性和下载速度。
另外,P2P网络具有匿名性和安全性。
在传统的中心化网络中,用户需要向中央服务器提供个人信息并受到监控。
而在P2P网络中,用户可以通过直接连接其他节点来共享和分发资源,无需向中央服务器提供个人信息,从而保护个人隐私和安全。
此外,P2P网络还具有弹性和扩展性。
在传统的中心化网络中,当用户数量增加时,中央服务器可能无法承受大量的请求,导致网络拥堵或崩溃。
而在P2P网络中,每个节点都充当服务器的角色,当节点数量增加时,网络的处理能力和吞吐量也会增加,从而使得网络具有更好的扩展性和适应性。
最后,P2P网络也具有自修复的功能。
在传统的中心化网络中,当服务器发生故障时,需要人工修复或更换服务器。
而在P2P网络中,每个节点都可以备份和共享资源,当一个节点离线或发生故障时,其他节点可以自动接替其角色,继续共享和分发资源,从而使网络具有自我修复的能力。
总之,P2P网络是一种具有各种功能和优势的网络系统。
它具有分布式的特点,能够高效地共享和分发资源,并保护用户的隐私和安全。
同时,P2P网络还具有弹性和扩展性,以及自修复的能力。
点对点技术(P2P)介绍点对点技术(Peer-to-Peer,简称P2P)是一种计算机网络通信模式,它允许网络中的每个节点(peer)既是客户端,又是服务器。
与传统的客户端-服务器模式不同,P2P网络中的节点可以直接与其他节点通信,而无需通过中央服务器进行中转。
P2P技术的出现,极大地改变了网络通信的方式,为用户提供了更高效、更灵活的网络体验。
一、P2P技术的基本原理P2P技术的基本原理是将网络中的每个节点都视为平等的,每个节点既可以提供服务,也可以使用其他节点提供的服务。
P2P网络中的节点可以直接与其他节点通信,无需经过中央服务器的中转。
当一个节点需要某种资源时,它可以通过搜索其他节点来获取所需资源,并直接从其他节点那里下载或获取。
这种直接的节点之间的通信方式,使得P2P 网络具有高效、灵活的特点。
二、P2P技术的优势1. 分布式架构:P2P网络中的节点分布在整个网络中,不存在单点故障,因此具有更高的可靠性和稳定性。
即使某个节点出现故障或离线,其他节点仍然可以继续提供服务。
2. 高效的资源共享:P2P网络中的每个节点都可以提供和获取资源,使得资源的利用率更高。
当一个节点需要某种资源时,它可以通过搜索其他节点来获取所需资源,而不需要依赖中央服务器的带宽和存储能力。
3. 灵活的网络拓扑:P2P网络中的节点可以动态加入和离开网络,网络拓扑结构可以根据节点的加入和离开自动调整。
这种灵活性使得P2P网络更适应大规模网络环境下的变化和扩展。
4. 低成本:P2P网络不需要中央服务器的支持,减少了服务器的成本和维护费用。
同时,P2P网络中的节点可以共享带宽和存储资源,降低了网络运营的成本。
三、P2P技术的应用领域1. 文件共享:P2P技术最早应用于文件共享领域,例如BitTorrent、eMule等。
用户可以通过P2P网络直接从其他用户那里下载所需的文件,而无需依赖中央服务器的带宽和存储能力。
2. 流媒体传输:P2P技术可以有效地解决流媒体传输中的带宽和延迟问题。
p2p网贷的主要运营模式P2P网贷,即点对点网贷,是指通过互联网平台连接借款人和投资人,使得借贷双方直接交易的一种金融模式。
其主要运营模式如下:1. 平台审核和管理:P2P网贷平台作为中介机构,首先会对借款人进行审核,包括对其个人信用情况、还款能力、借款用途等进行评估,确保借款人有足够的还款能力和可靠的信用背景。
同样地,平台也会对投资人进行审核,以确定其身份和资金来源的合法性。
此外,平台还负责管理资金流动、风控措施、合规运营等方面。
2. 资金撮合和配对:平台会根据借款人的需求和投资人的资金情况进行撮合和配对,将合适的借款人和投资人连接起来。
借款人可以发布借款信息,而投资人可以浏览借款列表并选择投资项目。
平台会利用自身的算法和风控模型,将借款人和投资人进行匹配,确保双方的利益和需求得到满足。
3. 利息和手续费收取:P2P网贷平台通常会收取借款人和投资人的一定手续费。
借款人需要支付平台一定的管理费或服务费,这些费用通常会包含在借款利率中。
投资人则需要支付平台一定的投资管理费用,这通常是按照投资金额的一定比例来收取的。
这些手续费是平台的主要收入来源。
4. 风险管理和催收:P2P网贷平台面临着借款违约和资金风险等挑战,因此风险管理和催收是其运营的重要环节。
平台会通过制定合理的风控措施来降低风险,包括对借款人进行信用评估和还款能力评估,建立风险管理系统等。
同时,如果借款人逾期或违约,平台会采取适当的催收措施,例如通过电话、短信、法律手段等追回欠款。
5. 信息披露和运营透明:P2P网贷平台需要向借款人和投资人提供透明的信息披露。
平台应当公布借款人的基本信息、贷款利率、借款用途等,以及投资项目的基本情况、预计收益和风险等。
这有助于借款人和投资人做出明智的决策,并提高平台的信誉度和声誉。
综上所述,P2P网贷的主要运营模式包括审核和管理、资金撮合和配对、利息和手续费收取、风险管理和催收、以及信息披露和运营透明。
这些模式共同构成了P2P网贷平台的运营体系,为借款人和投资人提供了一个方便、高效的金融服务平台。
P2P网络理财几大业务详解1、小额信用借款(白领)小额信用借款(白领)模式的平台,非常比拼平台在小额信贷领域的实力,这个实力既包括平台线上线下获取借款人的能力,也包括风控审核欺诈借款人的能力,还包括贷后催收的能力。
因此目前在小额信贷领域有一番作为的,大都是早期进入网贷市场的有较深厚小额信贷从业经历的平台。
(早期网贷是很纯正的,除了个别如红岭、个别车贷平台,大都是小额信用借款平台。
小额信用借款(白领)模式的代表性平台有陆金所、宜人贷、人人贷。
这类模式的平台,看借款人信息没有意义,有些投资人臆想小额信用借款标的平台造假逻辑上也站不住脚。
投资者看小额信用借款平台更多是要评估平台风控能力,这只能看平台背景,看平台是否在小额信贷领域有充足的经验。
此外,由于小额信用借款平台大都采用风险准备金保障模式,还必须通过考察平台风险准备金的提取比例、透明度(是否有托管、是否是专户)、垫付规则以及数据的变化幅度判断平台风控和偿付能力是否有变化。
毕竟对于资深的小额信用借款(白领)模式的平台来说,理论上是不会出现系统性的大面积借款人违约的情况,平台风控能力会随着从业时间增加而越来越强,因此除考察平台在小额信贷行业的实力外,考察平台的保障制度会非常关键。
与之相比,小额信用借款(学生)的保障制度就是形同儿戏了。
当然,小额信用借款(白领)本质上是信用卡的补充,因此在有一定竞争的情况下,平台规模扩张不可能飞速,宜人贷、人人贷这种自发拓展借款人的平台债权是非常紧张的。
小额信用借款(白领)相对来说是最安全的借款模式,但不是收益最高的借款模式。
2、小额信用借款(学生)小额信用借款(学生),单笔金额比小额信用借款(白领)低的多,主要是学生消费借款,个别P2P平台也允许学生不消费直接凭信用借款。
这个模式发起于14年底,起初被业界非常不看好,主要原因是学生人群的还款能力、还款意愿受质疑,这在05-10年的大学生信用卡发卡热潮-禁止发卡中已经得到充分体现。
P2P四种运营模式目前国内P2P网贷平台大致有四种运营模式:一、无担保线上交易模式。
此模式接近美国P2P网贷,即平台只充当“牵线人”,披露信息,不担保,风险由投资者自担。
这是一种纯信用的贷款。
不过,国内这种模式的平台很少。
不提供资金担保,很难让投资者接受。
二、有担保线上交易模式。
这类P2P网贷平台不是单纯的中介,而是与担保机构合作,负责核实借款人信息,并管理资金,平台既是担保人,也是联合追款人。
对投资者来说,风险较低,但平台经营成本也由此增加。
三、线下交易模式。
类似于民间借贷,线上的网络平台负责提供信息,最后线下完成交易,一般借贷方需要有抵押品,从纯信用贷款到抵押贷款,大大降低了风险,不过线下交易受到区域制约。
四、线上线下结合方式。
这是目前较为理想一个模式,小额交易线上完成,超过一定数额则线下交易,并要求有抵押物。
这种模式比单纯的线上或线下交易更具优势。
三大难题待解首先是征信。
目前国内征信大环境不好,征信体系还未建立。
P2P网贷平台无法利用社会征信资源,不得不自建征信团队。
“P2P征信现在基本上等于零,大家的风控手段是‘八仙过海各显神通’,但有效性存在很大问题。
”网贷之家创始人徐红伟说。
而在美国,征信业成熟发达,三大征信机构鼎足而立,P2P平台向机构购买个人信用报告。
美国成熟的征信业无疑是中国同行们学习的标杆。
徐红伟表示,征信和风控成本,将成为未来P2P平台成败的分水岭。
其次是平台担保。
P2P网贷平台不能代偿、不自担。
显然,平台不担保,对投资者来说缺乏吸引力,担保则违背相关政策。
于是很多平台将担保业务分离,引入第三方担保。
有业内人士表示,P2P引入第三方保险、第三方担保公司将是大趋势。
最后是第三方资金托管。
P2P网贷平台自建资金池,也是很大的问题。
最理想的状态,平台不接触资金。
平台资金第三方资金托管被寄予厚望。
目前亦被许多平台采用。
P2P的三种业务模式
P2P(Peer-to-Peer)是一种对等计算模式,它允许参与者在不需要中央服务器的情况下直接互联和通信。
在P2P网络中,所有的节点都具有相同的能力,并且可以充当客户端和服务器,相互之间共享资源和服务。
P2P网络已经被广泛应用于各种业务模式中,下面是P2P的三种常见的业务模式:
1.文件共享:
2.互联网电视:
P2P互联网电视是一种利用P2P技术传输视频内容的业务模式。
在传统的互联网电视中,视频内容是从中央服务器发送到每个用户,这会导致网络拥堵和高延迟。
而P2P互联网电视通过在P2P网络中分布式存储和传输视频内容,可以提供更快的视频加载速度和更好的用户体验。
用户可以通过P2P网络直接与其他用户共享视频内容,从而减少对中央服务器的依赖。
3.互助金融:
P2P互助金融是一种通过P2P网络提供互助金融服务的业务模式。
在传统的金融系统中,用户需要通过银行等中介来获取贷款或投资理财,而P2P互助金融可以让用户直接与其他用户进行资金借贷和理财投资。
这种模式可以降低中介费用和信贷风险,提高融资效率。
同时,P2P互助金融还可以提供更多样化的金融产品和服务,满足用户个性化的金融需求。
总结起来,P2P的三种业务模式分别是文件共享、互联网电视和互助金融。
这些模式都是基于P2P技术的优势,例如去中心化、高效传输和资
源共享,来提供更好的服务和用户体验。
然而,P2P也存在一些挑战,例如安全性和可扩展性等问题,需要在实际应用中加以解决。
P2P系统功能描述Ø登陆验证功能:对于账号填写错误等,需提示给用户;Ø客户通过服务器转发,实现私聊和群聊模式;Ø客户间可以发送数据消息,也可传送文件数据;Ø聊天时可以插入图片等多媒体信息;Ø显示目前其他用户列表,能够提示在线用户数目、状态等;Ø具有保存和清空聊天记录的功能;Ø具有友好、易用、美观的图形界面,并且无垃圾信息。
协议结构Ø通信协议(数据包分析)接受到一个完整的数据包后,就对其进行分析,取出数据包类型,然后根据不同的类型进行处理。
Ø数据包格式:消息头|消息内容消息头说明:ž CONNECT:建立连接的数据ž PRIV:表示私聊模式ž CHAT:表示群聊模式ž LEAVE:表示某个客户程序关闭了与服务器的连接ž LISTEN:表示监听客户的服务请求ž JOIN:表示某个客户程序加入了聊天室ž QUIT:表示服务器退出消息内容说明:ž在建立连接的数据包中,消息内容只包括自己的用户名;ž在私聊模式下,消息内容包括自己的用户名、数据和指定的私聊用户名;ž在群聊模式下,消息内容包括自己的用户名和数据;ž在LISTEN模式下,消息内容只包括用户名;客户端代码:view plaincopy to clipboardprint?ing System;ing System.Collections.Generic;ing ponentModel;ing System.Data;ing System.Drawing;ing System.Linq;ing System.Text;ing System.Windows.Forms;ing ;ing .Sockets;ing System.IO;ing System.Threading;13.space 聊天室程序15.{16. public partial class chatface : Form17. {18.19. private int serverport;20. private TcpClient clientsocket;21. private NetworkStream ns;22. private StreamReader sr;23. private Thread recThread=null;24. private string serveraddress;25. private string clientname;26. private bool connected = false;27.28.29.30. public chatface()31. {32. InitializeComponent();33. btn_savemessage.Enabled = false;34. btn_shutdown.Enabled = false;35. btn_stopconnect.Enabled = false;36. btn_send.Enabled = false;37. radioBtn_public.Checked = true;38. textBox_port.Text = "2500";39. textBox_ip.Text = "127.0.0.1";40.41. }42. protected override void OnClosed(EventArgs e)43. {44. QuitChat();45. if (recThread != null && recThread.IsAlive)46. recThread.Abort();47. base.OnClosed(e);48. }49. private void CreateConnection()50. {51. label_show.Text="连接到服务器";52. try53. {54. clientsocket = new TcpClient(serveraddress, serverport);55. ns = clientsocket.GetStream();56. sr = new StreamReader(ns);57. connected = true;58. }59. catch (Exception e)60. {61. MessageBox.Show("无法连接到服务器", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);62. label_show.Text = "未连接到服务器";63. }64. }65.66. private void StoreforServer()67. {68. try69. {70. string command = "CONNECT|" + textBox_username.Text;71. Byte[] outbytes = System.Text.Encoding.Default.GetBytes(command);72. ns.Write(outbytes,0,outbytes.Length);73.74. string serverresponse = sr.ReadLine();75.76. serverresponse.Trim();77. string[] tokens = serverresponse.Split(new Char[]{'|'});78.79.80. if(tokens[0] == "LISTEN")81. {82. label_show.Text = "连接到服务器";83. btn_stopconnect.Enabled = true;84. }85. for(int n=1; n<tokens.Length-1; n++)86. onlineUser.Items.Add(tokens[n].Trim(new char[] { '\r', '\n' }));87.88.89. // MessageBox.Show(tokens[1]);90. this.Text = clientname + ": 连接到服务器";91.92. }93. catch (Exception e)94. {95. MessageBox.Show("未连接到!","Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);96. }97.98.99. }100.101. private void ReceiveChat()102. {103. bool alive = true;104. while (alive)105. {106. try107. {108. Byte[] buffer = new Byte[2048000];109. ns.Read(buffer, 0, buffer.Length);110. string time = System.DateTime.Now.ToLongTimeString();111. string chatter = System.Text.Encoding.Default.GetString(buffer); 112.113. string[] tokens = chatter.Split(new Char[] { '|' });114.115. if (tokens[0] == "CHAT")116. {117. allmessage.AppendText(tokens[1].Trim());118. allmessage.AppendText(" "+time+" \r\n");119. // allmessage.AppendText(tokens[2].Trim());120.121. #region 利用剪切板来追加数据122. allmessage.Select(allmessage.Rtf.Length, 0);123. allmessage.SelectedRtf = tokens[2].Trim ();124. Clipboard.SetDataObject(tokens[2].Trim ());125. allmessage.Paste(DataFormats.GetFormat(DataFormats.Rtf)); 126. allmessage.AppendText("\r\n");127. #endregion128.129. }130. if (tokens[0] == "PRIV")131. {132.133. allmessage.AppendText("悄悄话来自");134. allmessage.AppendText(tokens[1].Trim());135. allmessage.AppendText(" "+time + "\r\n");136. //allmessage.AppendText(tokens[2]+ "\r\n");//不同聊天模式token格式不一样137. #region 利用剪切板来追加数据138. allmessage.Select(allmessage.Rtf.Length, 0);139. allmessage.SelectedRtf = tokens[2].Trim();140. Clipboard.SetDataObject(tokens[2].Trim());141. allmessage.Paste(DataFormats.GetFormat(DataFormats.Rtf)); 142. allmessage.AppendText("\r\n");143. #endregion144.145.146. }147. if (tokens[0] == "JOIN")148. {149. allmessage.AppendText(time + " ");150. allmessage.AppendText(tokens[1].Trim());151. allmessage.AppendText("加入聊天室" + "\r\n");152. string newcomer = tokens[1].Trim(new char[]{'\r','\n'});153. //string newcomer = tokens[1].Trim();154. //MessageBox.Show(newcomer);155. onlineUser.Items.Add(newcomer);156. }157. if (tokens[0] == "LEAVE")158. {159. allmessage.AppendText(time + " ");160. allmessage.AppendText(tokens[1].Trim());161. allmessage.AppendText("退出了聊天室" + "\r\n");162. string leaver = tokens[1].Trim(new char[]{'\r','\n'});163.164.165. for (int n = 0; n < onlineUser.Items.Count ; n++)166. {167. if(onlineUser.Items[n].ToString().CompareTo(leaver )==0) 168. {169. onlineUser.Items.RemoveAt(n);170. }171. }172.173.174. }175. if (tokens[0] == "QUIT")176. {177. ns.Close();178. clientsocket.Close();179. alive = false;180. label_show.Text="服务器断开";181. connected = false;182. btn_send.Enabled = false;183. btn_stopconnect.Enabled = false;184. btn_shutdown.Enabled = false;185. MessageBox.Show("服务器断开!");186.187. }188. }189. catch (Exception e) { }190. }191. }192.193. private void QuitChat()194. {195. if (connected)196. {197. try198. {199. string command = "LEAVE|" + clientname;200. Byte[] outbytes = System.Text.Encoding.Default.GetBytes(command);201. ns.Write(outbytes, 0, outbytes.Length);202. clientsocket.Close();203. }204. catch (Exception ex)205. {206. }207. }208.209. if (recThread != null && recThread.IsAlive)210. recThread.Abort();211. this.Text = "聊天室客户端";212.213. }214.215. private void btn_connect_Click(object sender, EventArgs e)216. {217.218. if (textBox_username.Text== "" || textBox_ip.T ext==""||textBox_port.Text=="")219. {220. MessageBox.Show("请输入完整信息", "Error",221. MessageBoxButtons.OK, MessageBoxIcon.Exclamation);222. return;223. }224. else225. {226. clientname = textBox_username.Text;227. serveraddress = textBox_ip.Text;228. serverport = int.Parse(textBox_port.Text);229. textBox_ip.Enabled = false;230. textBox_port.Enabled = false;231. textBox_username.Enabled = false;232.233. }234.235. CreateConnection();236.237. if (connected)238. {239. StoreforServer();240. recThread = new Thread(new ThreadStart(ReceiveChat));241. recThread.Start();242.243. btn_send.Enabled = true;244. btn_shutdown.Enabled = true;245. btn_connect.Enabled = false;246. btn_savemessage.Enabled = true;247.248. rtfEditor1.RtfDocument= "";249.250. }251. }252.253. private void btn_send_Click(object sender, EventArgs e)254. {255.256. try{257. if(radioBtn_public.Checked){258. string pubcommand = "CHAT|" + clientname +"| "+rtfEditor1 .RtfDocument+ "\r\n";259. Byte[] outbytes =System.Text.Encoding.Default.GetBytes(pubcommand);260. ns.Write(outbytes,0,outbytes.Length);261. rtfEditor1 .RtfDocument = "";262. }263. else{264. if(onlineUser.SelectedIndex ==-1){265. MessageBox.Show("请选择需要单独聊天的用户","Error", 266. MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 267. return;268. }269. string destclient = onlineUser.SelectedItem.ToString();270. string command = "PRIV|" + clientname + "| " + rtfEditor1 .RtfDocument + "|" + destclient;271. Byte[] outbytes = System.Text.Encoding.Default.GetBytes(command);272. ns.Write(outbytes,0,outbytes.Length);273. rtfEditor1.RtfDocument = "";274.275. }276.277. }278. catch(Exception ex){279. MessageBox.Show("失去与服务器的连接","Error",280. MessageBoxButtons.OK, MessageBoxIcon.Exclamation);281. ns.Close();282. clientsocket.Close();283. if(recThread != null && recThread.IsAlive)284. recThread.Abort();285. connected = false;286. label_show.Text = "未连接到服务器";287. }288.289. }290.291. private void btn_stopconnect_Click(object sender, EventArgs e)292. {293.294. QuitChat();295. btn_stopconnect.Enabled = false;296. btn_connect.Enabled = true;297. btn_send.Enabled = false;298. btn_shutdown.Enabled = false;299. ns.Close();300. clientsocket.Close();301. recThread.Abort();302. connected = false;303. onlineUser.Items.Clear();304. label_show.Text = "未连接到服务器";305.306. textBox_ip .Enabled =true ;307. textBox_username .Enabled =true ;308. }309.310. private void message_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)311. {312. if (e.KeyChar == '\r')313. if (connected)314. btn_send_Click(sender, e);315. else316. btn_connect_Click(sender, e);317. }318.319. private void btn_shutdown_Click(object sender, EventArgs e)320. {321. QuitChat();322. if (recThread != null && recThread.IsAlive)323. recThread.Abort();324. base.OnClosed(e);325. Close();326. }327.328. private void button8_Click(object sender, EventArgs e)329. {330. openFileDialog1.Filter = "图片文件|*.jpg|所有文件|*.*";331. if (openFileDialog1.ShowDialog() == DialogResult.OK)332. {333. richTextBox1.SelectedRtf = rtfEditor1.RtfDocument;334. Clipboard.SetDataObject(Image.FromFile(openFileDialog1.FileName), false);335. richTextBox1.Select(allmessage.Rtf.Length, 0);336. richTextBox1.Paste();337. rtfEditor1 .RtfDocument= richTextBox1.Rtf;338. }339. richTextBox1.ClearUndo();340. richTextBox1.Clear();341. }342. log log1 = new log();343. private void btn_check_Click(object sender, EventArgs e)344. {345. log1.Show();346. }347.348. private void btn_savemessage_Click(object sender, EventArgs e) 349. {350. log1.Con = allmessage.Text;351. MessageBox.Show("聊天记录已经保存^^ ", "提示", 352. MessageBoxButtons.OK, rmation); 353. }354.355. private void button1_Click(object sender, EventArgs e)356. {357. allmessage.Clear();358. }359.360.361. }362.}using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using ;using .Sockets;using System.IO;using System.Threading;namespace 聊天室程序{public partial class chatface : Form{private int serverport;private TcpClient clientsocket;private NetworkStream ns;private StreamReader sr;private Thread recThread=null;private string serveraddress;private string clientname;private bool connected = false;public chatface(){InitializeComponent();btn_savemessage.Enabled = false;btn_shutdown.Enabled = false;btn_stopconnect.Enabled = false;btn_send.Enabled = false;radioBtn_public.Checked = true;textBox_port.Text = "2500";textBox_ip.T ext = "127.0.0.1";}protected override void OnClosed(EventArgs e){QuitChat();if (recThread != null && recThread.IsAlive)recThread.Abort();base.OnClosed(e);}private void CreateConnection(){label_show.Text="连接到服务器";try{clientsocket = new TcpClient(serveraddress, serverport);ns = clientsocket.GetStream();sr = new StreamReader(ns);connected = true;}catch (Exception e){MessageBox.Show("无法连接到服务器", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);label_show.Text = "未连接到服务器";}}private void StoreforServer(){try{string command = "CONNECT|" + textBox_username.Text;Byte[] outbytes = System.Text.Encoding.Default.GetBytes(command);ns.Write(outbytes,0,outbytes.Length);string serverresponse = sr.ReadLine();serverresponse.Trim();string[] tokens = serverresponse.Split(new Char[]{'|'});if(tokens[0] == "LISTEN"){label_show.Text = "连接到服务器";btn_stopconnect.Enabled = true;}for(int n=1; n<tokens.Length-1; n++)onlineUser.Items.Add(tokens[n].Trim(new char[] { '\r', '\n' }));// MessageBox.Show(tokens[1]);this.Text = clientname + ": 连接到服务器";}catch (Exception e){MessageBox.Show("未连接到!","Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);}}private void ReceiveChat(){bool alive = true;while (alive){try{Byte[] buffer = new Byte[2048000];ns.Read(buffer, 0, buffer.Length);string time = System.DateTime.Now.ToLongTimeString();string chatter = System.Text.Encoding.Default.GetString(buffer);string[] tokens = chatter.Split(new Char[] { '|' });if (tokens[0] == "CHAT"){allmessage.AppendText(tokens[1].Trim());allmessage.AppendText(" "+time+" \r\n");// allmessage.AppendText(tokens[2].Trim());#region 利用剪切板来追加数据allmessage.Select(allmessage.Rtf.Length, 0);allmessage.SelectedRtf = tokens[2].Trim ();Clipboard.SetDataObject(tokens[2].Trim ());allmessage.Paste(DataFormats.GetFormat(DataFormats.Rtf));allmessage.AppendText("\r\n");#endregion}if (tokens[0] == "PRIV"){allmessage.AppendText("悄悄话来自");allmessage.AppendText(tokens[1].Trim());allmessage.AppendText(" "+time + "\r\n");//allmessage.AppendText(tokens[2]+ "\r\n");//不同聊天模式token 格式不一样#region 利用剪切板来追加数据allmessage.Select(allmessage.Rtf.Length, 0);allmessage.SelectedRtf = tokens[2].Trim();Clipboard.SetDataObject(tokens[2].Trim());allmessage.Paste(DataFormats.GetFormat(DataFormats.Rtf));allmessage.AppendText("\r\n");#endregion}if (tokens[0] == "JOIN"){allmessage.AppendText(time + " ");allmessage.AppendText(tokens[1].Trim());allmessage.AppendText("加入聊天室" + "\r\n");string newcomer = tokens[1].Trim(new char[]{'\r','\n'});//string newcomer = tokens[1].Trim();//MessageBox.Show(newcomer);onlineUser.Items.Add(newcomer);}if (tokens[0] == "LEAVE"){allmessage.AppendText(time + " ");allmessage.AppendText(tokens[1].Trim());allmessage.AppendText("退出了聊天室" + "\r\n");string leaver = tokens[1].Trim(new char[]{'\r','\n'});for (int n = 0; n < onlineUser.Items.Count ; n++){if(onlineUser.Items[n].ToString().CompareTo(leaver )==0){onlineUser.Items.RemoveAt(n);}}}if (tokens[0] == "QUIT"){ns.Close();clientsocket.Close();alive = false;label_show.Text="服务器断开";connected = false;btn_send.Enabled = false;btn_stopconnect.Enabled = false;btn_shutdown.Enabled = false;MessageBox.Show("服务器断开!");}}catch (Exception e) { }}}private void QuitChat(){if (connected){try{string command = "LEAVE|" + clientname;Byte[] outbytes = System.Text.Encoding.Default.GetBytes(command);ns.Write(outbytes, 0, outbytes.Length);clientsocket.Close();}catch (Exception ex){}}if (recThread != null && recThread.IsAlive)recThread.Abort();this.Text = "聊天室客户端";}private void btn_connect_Click(object sender, EventArgs e){if (textBox_username.Text== "" || textBox_ip.Text==""||textBox_port.Text=="") {MessageBox.Show("请输入完整信息", "Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);return;}else{clientname = textBox_username.Text;serveraddress = textBox_ip.Text;serverport = int.Parse(textBox_port.Text);textBox_ip.Enabled = false;textBox_port.Enabled = false;textBox_username.Enabled = false;}CreateConnection();if (connected){StoreforServer();recThread = new Thread(new ThreadStart(ReceiveChat));recThread.Start();btn_send.Enabled = true;btn_shutdown.Enabled = true;btn_connect.Enabled = false;btn_savemessage.Enabled = true;rtfEditor1.RtfDocument= "";}}private void btn_send_Click(object sender, EventArgs e){try{if(radioBtn_public.Checked){string pubcommand = "CHAT|" + clientname +"| "+rtfEditor1 .RtfDocument+ "\r\n";Byte[] outbytes = System.Text.Encoding.Default.GetBytes(pubcommand);ns.Write(outbytes,0,outbytes.Length);rtfEditor1 .RtfDocument = "";}else{if(onlineUser.SelectedIndex ==-1){MessageBox.Show("请选择需要单独聊天的用户","Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);return;}string destclient = onlineUser.SelectedItem.ToString();string command = "PRIV|" + clientname + "| " + rtfEditor1 .RtfDocument + "|" + destclient;Byte[] outbytes = System.Text.Encoding.Default.GetBytes(command);ns.Write(outbytes,0,outbytes.Length);rtfEditor1.RtfDocument = "";}}catch(Exception ex){MessageBox.Show("失去与服务器的连接","Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);ns.Close();clientsocket.Close();if(recThread != null && recThread.IsAlive)recThread.Abort();connected = false;label_show.Text = "未连接到服务器";}}private void btn_stopconnect_Click(object sender, EventArgs e){QuitChat();btn_stopconnect.Enabled = false;btn_connect.Enabled = true;btn_send.Enabled = false;btn_shutdown.Enabled = false;ns.Close();clientsocket.Close();recThread.Abort();connected = false;onlineUser.Items.Clear();label_show.Text = "未连接到服务器";textBox_ip .Enabled =true ;textBox_username .Enabled =true ;}private void message_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e){if (e.KeyChar == '\r')if (connected)btn_send_Click(sender, e);elsebtn_connect_Click(sender, e);}private void btn_shutdown_Click(object sender, EventArgs e){QuitChat();if (recThread != null && recThread.IsAlive)recThread.Abort();base.OnClosed(e);Close();}private void button8_Click(object sender, EventArgs e){openFileDialog1.Filter = "图片文件|*.jpg|所有文件|*.*";if (openFileDialog1.ShowDialog() == DialogResult.OK){richTextBox1.SelectedRtf = rtfEditor1.RtfDocument;Clipboard.SetDataObject(Image.FromFile(openFileDialog1.FileName), false);richTextBox1.Select(allmessage.Rtf.Length, 0);richTextBox1.Paste();rtfEditor1 .RtfDocument= richTextBox1.Rtf;}richTextBox1.ClearUndo();richTextBox1.Clear();}log log1 = new log();private void btn_check_Click(object sender, EventArgs e){log1.Show();}private void btn_savemessage_Click(object sender, EventArgs e){log1.Con = allmessage.Text;MessageBox.Show("聊天记录已经保存^^ ", "提示",MessageBoxButtons.OK, rmation);}private void button1_Click(object sender, EventArgs e){allmessage.Clear();}}}服务器端代码:view plaincopy to clipboardprint?ing System;ing System.Collections;ing ponentModel;ing System.Data;ing System.Drawing;ing System.Linq;ing System.Text;ing System.Windows.Forms;ing ;ing .Sockets;ing System.Threading;12.13.space 聊天室服务器端15.{16. public partial class Form1 : Form17. {18. private int listenport=2500; //服务器端监听端口19. private TcpListener listener; //服务器监听器20. private ArrayList clients; // 已连接客户端数组21. private Thread processor; //主线程22. private Socket clientsocket; //客户端套接字23. private Thread clientservice; //客户端线程24.25. public Form1()26. {27. InitializeComponent();28. clients = new ArrayList();29. //开始一个监听线程30. processor = new Thread(new ThreadStart(StartListening));31. processor.Start();32. }33. protected override void OnClosed(EventArgs e)//关闭时清除所有线程34. {35. try36. {37. for (int n = 0; n < clients.Count; n++)38. {39. Client cl = (Client)clients[n];40. SendToClient(cl, "QUIT|");41. cl.Sock.Close();42. cl.Client_Thread.Abort();43. }44. listener.Stop();45. if (processor != null)46. processor.Abort();47. }48. catch (Exception ex)49. {50. Console.WriteLine(ex.ToString());51. }52. base.OnClosed(e);53. }54.55. private void StartListening()56. {57. listener = new TcpListener(listenport);58. listener.Start();59. while (true)60. {61. try62. {63. Socket s = listener.AcceptSocket();64. clientsocket = s;65. clientservice = new Thread(new ThreadStart(ServiceClient));66. clientservice.Start(); //开始监听67. }68. catch (Exception e)69. {70. Console.WriteLine(e.ToString());71. }72. }73. //listener.Stop();74. }75.76.77. private void ServiceClient()78. {79. Socket client = clientsocket;80. bool alive = true;81.82. while (alive)83. {84. Byte[] buffer = new Byte[2048000];85. client.Receive(buffer);86. // string time = System.DateTime.Now.ToString();87. string clientcommand = System.Text.Encoding.Default.GetString(buffer);88.89. string[] tokens = clientcommand.Split(new Char[] { '|' });90.91. if (tokens[0] == "CONNECT")92. {93.94. for (int n = 0; n < clients.Count; n++)95. {96.97. Client cl = (Client)clients[n];98. SendToClient(cl, "JOIN|" + tokens[1]);99. }100. EndPoint ep = client.RemoteEndPoint;101. Client c = new Client(tokens[1], ep, clientservice, client); 102. clients.Add(c);103. string message = "LISTEN|" + GetChatterList() + "\r\n"; 104. SendToClient(c, message);105. clientlist.Items.Add(c);106.107. }108. if (tokens[0] == "CHAT")109. {110. for (int n = 0; n < clients.Count; n++)111. {112. Client cl = (Client)clients[n];113. SendToClient(cl, clientcommand);114. }115. }116. if (tokens[0] == "PRIV")117. {118. string destclient = tokens[3];119. for (int n = 0; n < clients.Count; n++)120. {121. Client cl = (Client)clients[n];122. if (pareTo(tokens[3]) == 0)123. SendToClient(cl, clientcommand);124. if (pareTo(tokens[1]) == 0)125. SendToClient(cl, clientcommand);126. }127. }128. if (tokens[0] == "LEAVE")129. {130. int remove = 0;131. bool found = false;132. int c = clients.Count;133. for (int n = 0; n < c; n++)134. {135. Client cl = (Client)clients[n];136. SendToClient(cl, clientcommand);137. if (pareTo(tokens[1]) == 0)138. {139. remove = n;140. found = true;141. clientlist.Items.Remove(cl);142. }143. }144. if (found)145. clients.RemoveAt(remove);146. client.Close();147. alive = false;148. }149. }150. }151. private void SendToClient(Client cl, string message)152. {153. try154. {155. byte[] buffer = System.Text.Encoding.Default.GetBytes(message.ToCharArray());156. cl.Sock.Send(buffer, buffer.Length, 0);157. }158. catch (Exception e)159. {160. cl.Sock.Close();161. cl.Client_Thread.Abort();162. clients.Remove(cl);163. clientlist.Items.Remove( + " : " + cl.Host.ToString());164. }165. }166. private string GetChatterList()167. {168. string chatters = "";169. for (int n = 0; n < clients.Count; n++)170. {171. Client cl = (Client)clients[n];172. chatters += ;173. chatters += "|";174. }175. chatters.Trim(new char[] { '|' });176. return chatters;177. }178. }179.}using System;using System.Collections;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using ;using .Sockets;using System.Threading;namespace 聊天室服务器端{public partial class Form1 : Form{private int listenport=2500; //服务器端监听端口private TcpListener listener; //服务器监听器private ArrayList clients; // 已连接客户端数组private Thread processor; //主线程private Socket clientsocket; //客户端套接字private Thread clientservice; //客户端线程public Form1(){InitializeComponent();clients = new ArrayList();//开始一个监听线程processor = new Thread(new ThreadStart(StartListening));processor.Start();}protected override void OnClosed(EventArgs e)//关闭时清除所有线程{try{for (int n = 0; n < clients.Count; n++){Client cl = (Client)clients[n];SendToClient(cl, "QUIT|");cl.Sock.Close();cl.Client_Thread.Abort();}listener.Stop();if (processor != null)processor.Abort();}catch (Exception ex){Console.WriteLine(ex.ToString());}base.OnClosed(e);}private void StartListening(){listener = new TcpListener(listenport);listener.Start();while (true){try{Socket s = listener.AcceptSocket();clientsocket = s;clientservice = new Thread(new ThreadStart(ServiceClient));clientservice.Start(); //开始监听}catch (Exception e){Console.WriteLine(e.ToString());}}//listener.Stop();}private void ServiceClient(){Socket client = clientsocket;bool alive = true;while (alive){Byte[] buffer = new Byte[2048000];client.Receive(buffer);// string time = System.DateTime.Now.ToString();string clientcommand = System.Text.Encoding.Default.GetString(buffer);string[] tokens = clientcommand.Split(new Char[] { '|' });if (tokens[0] == "CONNECT"){for (int n = 0; n < clients.Count; n++){Client cl = (Client)clients[n];SendToClient(cl, "JOIN|" + tokens[1]);}EndPoint ep = client.RemoteEndPoint;Client c = new Client(tokens[1], ep, clientservice, client);clients.Add(c);string message = "LISTEN|" + GetChatterList() + "\r\n";SendToClient(c, message);clientlist.Items.Add(c);}if (tokens[0] == "CHAT"){for (int n = 0; n < clients.Count; n++){Client cl = (Client)clients[n];SendToClient(cl, clientcommand);}}if (tokens[0] == "PRIV"){string destclient = tokens[3];for (int n = 0; n < clients.Count; n++){Client cl = (Client)clients[n];if (pareTo(tokens[3]) == 0)SendToClient(cl, clientcommand);if (pareTo(tokens[1]) == 0)SendToClient(cl, clientcommand);}}if (tokens[0] == "LEAVE"){int remove = 0;bool found = false;。
一、平台信息展示
平台信息的公布是首要的,投资者的对平台的了解,首先是对平台的一个整体性认识。
平台基本情况包括:
1.注册资金;
2..实缴资金;
3.业务范围;
4.注册时间;
5.股东情况;
6.公司营业执照、组织代码机构证;
7.税务等级证;
8.法人身份证;
9.管理层介绍。
从平台基本情况,我们可以对公司的资金实力和管理能力有初步的了解。
特别是注册资金和实缴资金,能一定程度上看出平台的“兜底”能力,更重要的是,一般资金实力越强的平台,投放到团队建设、系统防护等方面的资金更多,从而管理层素质更高,平台经营更稳定、科学。
优秀的管理层也能带来先进的管理方法,降低经营风险。
但是不排除一些做得“小而美”的草根平台,因此以上数据只能作为参考。
二、借款项目信息
借款项目的信息是投资人每次投资所需要的关键信息,因为不同的项目,其投资风险也是不同的。
不同的借款主体有不同的还款能力与还款意愿,因此需要公布较为完善的信息,以供投资者针对具体项目进行决策。
借款项目信息公布的具体内容可以包括:借款方身份信息原件(可隐藏个人信息)、风控评估报告原件,借款合同,抵押物照片及抵押物评估文件、借款企业证照、借款企业资金流水等。
1.项目基本信息
(1)借款金额
(2)总投标数
(3)最低投标金额
(4)年化利率
(5)投标进度
(6)最高投标金额
(7)借款期限
(8)还款方式
2.项目描述
(1)借款方简介
(2)借款用途
(3)还款来源
(4)回购方
3.风控信息
(1)风控审核
(2)风控措施
(3)投资人权益保障
4.还款计划
(1)借款标题
(2)当前期数/总期数
(3)还款本息
(4)实际到期日期
5.投标记录
(1)投标人/关系
(2)当前年利率
(3)投标金额
(4)有效金额
(5)投标时间
(6)投标类型
(7)状态
6.项目文件
由于不同种类项目要求文件不同,主要包括《借款合同》、《担保保证书》、《借款凭证》等。
平台项目信息披露情况设计到项目的透明度问题。
在保证项目透明的情况下,还要保障借款人隐私不被泄露。
投资者可以凭借以上信息独自对项目的风险程度做出判断,同时增加平台造假的成本,有利于反应项目的真实性,是信息披露环节中较为重要的一部分。
目前,P2P平台在这方面披露程度参差不齐。
此外,如果一家平台能对项目的信息披露得越详细,在一定程度上越能体现平台对自身风控能力的自信。
三、运营数据
运营数据的公布可以让投资了解平台的发展情况、经营状况,因此公布此项可以让投资者对平台更有信心,可以以报告的形式呈现给投资者。
平台运营数据包括:
1.年综合平均收益率;
2.累计成交量;
3.累计投资人数;
4.累计投资金额;
5.平均借款期限;
6.贷款余额;
7.风险保障金;
8.前十大投资人投资额占比;
9.前十大借款人借款额占比;
10.当天新增标数;
真实的平台运营数据可以反映出平台的运营能力,可持续发展能力以及平台是否是在合法经营。
例如前十大投资人和借款人的金额占比,就能看出平台集中度大
小,风险是否集中。
收益率、累计成交量、累计投资人数、累计投资金额可以看出平台获取项目和投资人的能力。
平均借款期限可以看出平台的业务分布,倾向于短期的还是长期的。
当天新增标数,在一定程度上也能看出平台风险。
运营数据也是投资者极为重点关注的一个点。
真实、准确、完整的数据可以反映平台可持续运营、财务及发展状况,也是评价平台安全性的重要参考信息。
四、资金披露
资金安全是投资人关注的重点,清晰明了的资金流向可以让投资者明白自身投资资金的使用去向,避免资金池、庞氏骗局等风险。
平台最好使用第三方支付或者银行进行资金托管,并定期公布监管情况。
若有风险保证金账户,也可以申请银行进行托管,并发布风险保障金托管报告。
五、平台合作机构情况
合作机构主要有:
1.银行;
2.担保、小贷公司;
3.第三方支付平台;
4.第三方审计机构;
5.第三方系统维护机构。
合作机构的资质与实力也是涉及平台安全问题重要的一环。
平台除了公布合作机构的基本情况外,还应定期公布他们的经营情况。
特别是现在担保行业也出现了大地震,我们要对合作机构认真的审核,比如担保公司的兜底能力,担保公司关于该项目的专项保证金应该会存放在银行指定账户里,我们需要公布这个账户的资金情况。
此外,存在银行的风险保障金、或资金托管合作以及相关的签署文件也要对外公布。
一个好的合作机构是不会畏惧公布自己的经营情况的,这从侧面可以体现出合作机构的实力。
六、平台风控手段
平台风控手段主要包括:
1.平台项目审核体系;
2.平台自身内控制度;
3.平台各部门资金流动情况;
4.平台与投资人、借款人的资金流动去向;
5.平台涉及的合同文件;
6.平台的逾期率、不良率、坏账率(要给出相应的计算公式);
7.平台系统安全情况。
以上信息披露可以让投资人进一步了解平台的整体经营情况,了解自己的资金流动,并结合资金的账户进行检验。
对于投资人来讲,P2P平台的风险控制措施和资金安全措施是非常重要的。
平台应给予真实、客观、详尽的披露,可以采用文字配以流程图及模型等形式说明。