http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3244|回复: 4

[其他] Socket点对点通信求助!!!

[复制链接]
发表于 2013-10-3 19:51:27 | 显示全部楼层 |阅读模式
麻烦各位大神帮忙给小弟讲解一下“Socket点对点通信的原理”,客户端群聊、客户端和服务端通信都已成功了


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-10-4 00:18:27 | 显示全部楼层
“Socket点对点通信的原理”,客户端群聊、客户端和服务端通信都已成功了
其实你已经做了点对点通信呀.
客户端对服务端就是1对1的关系(单播),群聊是1对多.(广播)
通讯原理就是基于TCP的无边际面向连接的关系进行传输,啥叫无边际面向关系?通俗点说就是+-无穷..
TCP很负责任,经过3次握手后开始传送报文消息,在报文中自定义去规定消息边际,说白了就是自己规定一条报文有多长,
一条报文包含什么内容,一条报文包含的内容是否正确.对报文中的内容是否需要转义.
举个例子给你,
报文格式如下(0x):
                     0x9e 9527 0001 1310040002 123456  0x18 3c 0x9e
                     说明:
                               0x9e  分别是头尾,用来区分一条报文的头,尾,方便截取数据
                               9527 报文自定义协议头(我随便写的,目的就是为了区分这条报文的作用,如果报文比较多的情况下)
                               0001 当前报文流水号.(目的:传输回应后所要应答的消息.)
                               1310040002  当前时间
                               123456 传送的消息内容.(****本来因该都是16进制,这里直接用10进制书写,比较容易阅读.传输时因该所有都是以16进制传输)
                              0x18 代表从协议头到协议尾的长度,10进制则为24
                            3c 代表数据校验.从9527一直到0x18 对其进行异或校验(我个人常用这种校验方法来校验数据的完整性)

                      假设上方报文是客户端发送来的.
服务端接收时:
                       判断首尾是否都是0x9e,若不是,抛弃.
                       从9527 开始到0x18,进行数据(异或)校验,若不是3C,抛弃.(后期一般发现包体不正确,获取到0001,要求客户端重新发一条包)
                      若以上都通过,则解出报文内容.然后根据自定义协议开始通讯.比如我回一条654321
                     0x9e 09527 0001 1310040012 654321  0x18 3c 0x9e
                   客户端自行解包,与服务端一样的判断(09527代表对9527的回应,具体回应则为0001).取出654321 在继续通信.


说白了就好比找人一样.你在一个班级找某人,你在门口大喊,谁是XXX(你不知道XXX是谁,只有发送一条所有人都知道的信息.这就是广播.)   
当你知道谁是XXX了,你会问:"你是 XXX?";对方答"yes";你收到"yes后开始传递消息.";XXX收到消息后给你响应.这就完成了一次通讯.提到这里不得不提下心跳包.心跳包就是保持连接的机制.CLR会自动回收对象,当socket没有通讯时,他默认认为这个连接挂断了,所以会自己回收资源.一般写程序都会有个超时应答时间,一般认为30秒没有接收到心跳包就认为shutdown(下线).发送一条下线报文,如果有应答,心跳继续,如果超过定义应答次数还是没应答,就自己讲这次连接释放吧.


havefun...{:soso_e113:}
by Ro4ters                        
发表于 2013-10-3 21:13:28 | 显示全部楼层
客户端群聊、客户端和服务端通信都已成功了……
牛人嘛!怎么还问这些低级问题?
 楼主| 发表于 2013-10-10 00:38:01 | 显示全部楼层
cload 发表于 2013-10-3 21:13
客户端群聊、客户端和服务端通信都已成功了……
牛人嘛!怎么还问这些低级问题?

{:soso_e110:}
 楼主| 发表于 2013-10-10 00:38:55 | 显示全部楼层
ro4ters 发表于 2013-10-4 00:18
“Socket点对点通信的原理”,客户端群聊、客户端和服务端通信都已成功了
其实你已经做了点对点通信呀.
...

{:soso_e179:}{:soso_e181:}
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-3 21:45

© 2014-2021

快速回复 返回顶部 返回列表