加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

Socket技术,实现Http协议和游戏服务器协议(Java代码)

发布时间:2019-08-02 22:41:33 所属栏目:业界 来源:今日头条
导读:在收集技能中,前后端通信是一个难点,也是一个处事器措施员必需攻陷的技能瓶颈。在两台计较神秘实现信息交互,就必要一种技能来说,而两台计较机网卡来实现,无非就是两种技能UDP和TCP,个中,两种技能因为差异的特征,行使在差异的处所,在一些不要求高
副问题[/!--empirenews.page--]

在收集技能中,前后端通信是一个难点,也是一个处事器措施员必需攻陷的技能瓶颈。在两台计较神秘实现信息交互,就必要一种技能来说,而两台计较机网卡来实现,无非就是两种技能UDP和TCP,个中,两种技能因为差异的特征,行使在差异的处所,在一些不要求高达到型传输规模(如:视频)行使UDP之外,90%的通信都是通过TCP协议来传输,因为其靠得住的安详到达性。

在措施员眼里,不消太想相识网卡是通过5层协议(可能说3层协议)怎么实现tcp通信,在编程说话里socket就是tcp的代名词(也许有点禁绝备哈,可是我小我私人是这样以为的)。

我们先用一个简朴的http协议中get案例来说,让各人更好领略游戏前后端的通信协议指定。

Socket技能,实现Http协媾和游戏处事器协议(Java代码)

以下为java代码:

  1. public class testHttpClient { 
  2. public static void main(String[] arg){ 
  3. Socket socket=new Socket(); 
  4. try { 
  5. socket.connect(new InetSocketAddress("www.baidu.com", 80), 300); 
  6. OutputStream o=socket.getOutputStream(); 
  7. //http协议字符串 包罗包头和包体,http回收"rn"做为支解,包头除了第一排之外,都是回收key:value方法来生涯信息,一把处事器解锁提取 
  8. String requestStr="GET / HTTP/1.1rn" //第一排三个信息 别离是 1、哀求方法(一把城市用两张get和post) 2、哀求路径 3、回收http1.1协议 
  9. +"Host: www.baidu.comrn" //阐明Host 
  10. //假若有其余hearder 字段信息可以防备在这里 
  11. +"rn" //这里暗示包头竣事 
  12. +"rn"; //这里暗示包体竣事(因为这个get没有任何的布局体,假如必要向post那样传参 key1=value1&key2=value2,留意必然要在包头中增进"Content-Length:***"阐明包体长度) 
  13. o.write(requestStr.getBytes()); 
  14. o.flush(); 
  15. BufferedReader i= new BufferedReader(new InputStreamReader (socket.getInputStream())); 
  16. String response=""; 
  17. String readOneStr=null; 
  18. while ((readOneStr=i.readLine())!=null){ 
  19. response+=readOneStr+"rn"; 
  20. System.out.println(response); 
  21. }catch (IOException ioe){ 
  22. ioe.printStackTrace(); 
socket技能,实现http协媾和游戏处事器协议(java代码)

重点声名一下整个socket发送内容:http协议回收“rn”作为解码器支解标记,这个协议的二进制流包罗包头和包体两个部门,哀求协议详细内容:

包头:

  1. GET / HTTP/1.1rn 

行使空格支解成三个信息1、哀求方法(一把城市用两张get和post) 2、哀求路径 3、回收http1.1协议

  1. Host: www.baidu.comrn 
  2. Content-Length: ***rn 
  3. Content-type:application/jsonrn 
  4. Cookie:************rn 

回收key:value的方法向处事器提交信息。Content-Length很重要,用于处事器读取包体的长度。

  1. rn 

再用“rn”来声名http包头信息竣事,后头的字节约是包头内容

  1. rn 

这个声名哀求包体竣事

这里根基上一个http协议哀求协议竣事,然后我们再来看看处事器http相应信息,也是包罗包头和包体,包体有点变革的是第一个排“HTTP/1.1 200 OKrn” 也是三部门信息,返回协议,状态码和状态(http中200就是乐成相应的意思),除此以外也是也是key:value值了。也是回收持续的两个“rn”来支解包头和包体字节约。包体就没有什么好说了,就是一些html、css、js代码,也就我们现适用户能望见的网页代码。

附图如下:

socket技能,实现http协媾和游戏处事器协议(java代码)

看完了上面的http协议,我们就可以领略我接下来要声名我在以是游戏项目处事器计划的协议,我们游戏项目因为成果必要,都是回收tcp长毗连,处事器必要按时向游戏前端发送差异指令和相应前端哀求,以是必要一个严谨高效的通信协议:

包头

  1. 包头开始辨认码(int)4+ 呼吁编号(shot)2 + 动静独一编号(int)4 +内容长度(int)4 

包体

  1. 内容bytes[] 

用意声名:包头含有四个重要信息,第一个是包头开始辨认码,用于处事器在轮回读取socket管道信息时,发明新包开始。第二个是呼吁编号,就是前来哀求处事器的举措指令(如:"1"用户登入验证,“2”为击杀呼吁),处事器会自动去挪用相应模块代码。第三部门是这个包独一码,用于防备前端一再提交包,造成处事器营业逻辑错误。第四部门,就是包体字节约长度。这样,每一个包头牢靠长度为14字节,而包体是无关紧要的,取决于挪用呼吁是否是必要前端转达参数。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读